В чём разница между 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; } });
Комментариев нет:
Отправить комментарий