В чём разница между typeof boo == "undefined" и boo === undefined в JavaScript?
Они делают почти одно и то же. И у boo === undefined есть плюсы и минусы:
Плюсы
+ И в "undefined", и в undefined можно допустить опечатку. Но во втором случае браузер немедленно заругается.
+ Такое сравнение подходит и для "пустых" параметров функции, и для несуществующих свойств объектов.
Минусы
- Если переменная boo просто нигде не объявлена, то будет ошибка. А вот typeof boo == "undefined" сработает.
Аналогично boo === undefined срабатывает и || для неопределённого свойства или аргумента функции.
А это значит, что старый код можно улучшить ещё:
Они делают почти одно и то же. И у boo === undefined есть плюсы и минусы:
Плюсы
+ И в "undefined", и в undefined можно допустить опечатку. Но во втором случае браузер немедленно заругается.
+ Такое сравнение подходит и для "пустых" параметров функции, и для несуществующих свойств объектов.
Минусы
- Если переменная boo просто нигде не объявлена, то будет ошибка. А вот typeof boo == "undefined" сработает.
Аналогично boo === undefined срабатывает и || для неопределённого свойства или аргумента функции.
А это значит, что старый код можно улучшить ещё:
$.extend({
getUrlVars : function(){
var vars = {};
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
var i = hashes.length;
while(i--) {
var hash = hashes[i].split('=');
vars[hash[0]] = hash[1];
}
return vars;
},
urlVars : null,
getUrlVar : function(key) {
if(!key) return null;
if(!this.urlVars) this.urlVars = this.urlVars();
return (this.urlVars[key] !== undefined) ? this.urlVars[key] : null;
},
toUrlVar : function(url, params) {
var url_val = url || window.location.href.slice(0, window.location.href.indexOf('?'));
var dict_params = params || this.urlVars;
if(dict_params === undefined || !dict_params)
return url_val;
var params_str = "";
for(var param_key in dict_params) {
var param = param_key + "=" + dict_params[param_key];
params_str += (!params_str) ? param : ("&" + param);
}
return params_str ? (url_val + "?" + params_str) : url_val;
}
});
Комментариев нет:
Отправить комментарий