вторник, 17 марта 2015 г.

undefined в JavaScript и receiving GET params of url - 3

В чём разница между typeof boo == "undefined" и boo === undefined в JavaScript?

Они делают почти одно и то же. И у 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;
 }
});

Комментариев нет:

Отправить комментарий