JavaScript变量定义混乱

时间:2015-08-28 05:33:24

标签: javascript

我有2个javascript代码。除此之外,检查varable是否等于null或变量类型是否未定义。但在一种情况下,我会收到错误,在其他情况下,我不会收到任何错误。

代码1:

if (NS1 === null || typeof (NS1) === 'undefined') {
    ...  }

代码2:

 if (window.NS1 === null || typeof (window.NS1) === 'undefined') {
  ...   }

对于代码1,我收到错误

  

NS1未定义

而对于代码2,我没有收到任何错误。我不明白可能是什么原因,因为我没有定义NS1或window.NS1。所以我应该在这两种情况下都会出错。

2 个答案:

答案 0 :(得分:6)

  

所以我应该在这两种情况下都会出错。

尝试访问 1 未声明的变量会导致参考错误。但是,尝试访问不存在的属性,就像在第二个示例中一样,只返回undefined,而不是抛出错误:

> console.log({}.foo);
undefined

这就是JavaScript的工作原理。

1:有人可能会说你在typeof NS1时也在访问变量。虽然这是真的,typeof很特别。即使未声明变量,它也会返回"undefined"

答案 1 :(得分:0)

因为null === undefined // --> false

NS1 === null是指未定义的变量 NS1 ,因此会抛出异常。

window.NS1 === null将评估为 false ,因为 window.NS1 未定义。 undefined不等于null

NS1 作为未声明的变量 - >例外
window.NS1 作为未声明的属性 - >未定义