javascript---不可靠的“undefined”

  undefinedhtml

    在 JavaScript 中,假设咱们想判断一个是不是 undefined,那么咱们一般会这样写:jquery

  

if(a === undefined){//code}

可是,JavaScript 中的 undefined 并不可靠,咱们试着写这样一个函数:git

function test(a) {
  var undefined = 1;
  console.log(undefined); // => 1
  if(a===undefined) {
    // ...
  }
}

能够看到,undefined 被轻易地修改成了 1,使得咱们以后的对于 undefined 理解引发歧义。因此,在 JavaScript 中,把 undefined 直接解释为 “未定义” 是有风险的,由于这个标识符可能被篡改。express

在 ES5 以前,全局的 undefined 也是能够被修改的,而在 ES5 中,该标识符被设计为了只读标识符, 假如你如今的浏览器不是太老,你能够在控制台中输入如下语句测试一下:api

undefined = 1;
console.log(undefined); // => undefined

如今咱们可以明确的,标识符 undefined 并不能真正反映 “未定义”,因此咱们得经过其余手段得到这一语义。幸亏 JavaScript 还提供了 void 运算符,该运算符会对指定的表达式求值,并返回受信任的 undefined浏览器

void expression

最多见的用法是经过如下运算来得到 undefined,表达式为 0 时的运算开销最小:函数

void 0;
// or
void(0);

  全部须要得到 undefined 地方,都经过 void 0 进行了替代测试

  固然,获取undefined还有另外一种方式:看过jquery源码的同窗,应该知道里面的当即执行函数:spa

(function(window,undefined) {
    // ...
})(window)

在这个函数中,咱们没有向其传递第二参数(形参名叫 undefined),那么第二个参数的值就会被认为 “未定义”,所以,经过这种方式,在该函数的做用域中全部的 undefined 都为受信的 undefined。是否是很妙啊!!设计

                                                       摘自----https://yoyoyohamapi.gitbooks.io/undersercore-analysis/content/base/undefined%E7%9A%84%E5%A4%84%E7%90%86.html

相关文章
相关标签/搜索