2015-08-28 166 views
1

我有2个javascript代码。他们之中检查是否可变的变量等于空或变量的类型是未定义的。但在一种情况下,我得到错误,而在其他情况下,我没有得到任何错误。JavaScript变量定义混淆

代码1:

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

代码2:

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

对于代码1,我得到错误

NS1 is not defined

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

+1

'NS1 === null' ---你”重新尝试检索不存在的变量的值。 – zerkms

+0

'typeof'不起作用。使用类似'typeof window.NS1' – Manwal

+2

如果您将'typeof'检查移至'||'的左侧,由于短路评估,您将不会得到任何错误〜if( typeof of NS1 ==='undefined'|| NS1 === null)' – Phil

回答

6

So I should get error in both the condition.

尝试访问在基准误差一个未声明的变量结果。但是,试图访问一个不存在财产,就像你在第二个例子中的事,会简单的返回undefined,不会引发错误:

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

这是JavaScript的是如何工作的。


1:当你做typeof NS1时,有人可能会争辩说你也在访问这个变量。虽然如此,typeof是特别的。即使变量未被声明,它也会返回"undefined"

0

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

NS1 === null是指可变NS1这是没有定义,所以它抛出异常。

window.NS1 === null将评估为,因为window.NS1是不确定的。和undefined不等于空

NS1作为未声明的变量 - >例外
window.NS1为未申报财产 - >未定义