JavaScript变量定义混乱
我有两个javascript代码。两者都检查varable是否等于null或变量类型是否未定义。但在一种情况下,我会出错,而在另一种情况下,我不会出错 代码1:JavaScript变量定义混乱,javascript,Javascript,我有两个javascript代码。两者都检查varable是否等于null或变量类型是否未定义。但在一种情况下,我会出错,而在另一种情况下,我不会出错 代码1: if (NS1 === null || typeof (NS1) === 'undefined') { ... } 代码2: if (window.NS1 === null || typeof (window.NS1) === 'undefined') { ... } 对于代码1,我得到一个错误 NS1未定义 而
if (NS1 === null || typeof (NS1) === 'undefined') {
... }
代码2:
if (window.NS1 === null || typeof (window.NS1) === 'undefined') {
... }
对于代码1,我得到一个错误
NS1未定义
而对于代码2,我没有得到任何错误。我不明白原因是什么,因为我没有定义NS1或window.NS1。所以在这两种情况下我都会出错
所以在这两种情况下我都会出错
尝试访问1未声明的变量会导致引用错误。但是,尝试访问不存在的属性,就像您在第二个示例中所做的那样,只会返回未定义
,而不会抛出错误:
> console.log({}.foo);
undefined
这就是JavaScript的工作原理
1:有人可能会说,当您执行NS1的
typeofNS1
时,您也在访问变量。虽然这是真的,typeof
是特别的。即使未声明变量,它也将返回“undefined”
所以在这两种情况下我都会出错
尝试访问1未声明的变量会导致引用错误。但是,尝试访问不存在的属性,就像您在第二个示例中所做的那样,只会返回未定义
,而不会抛出错误:
> console.log({}.foo);
undefined
这就是JavaScript的工作原理
1:有人可能会说,当您执行NS1的
typeofNS1
时,您也在访问变量。虽然这是真的,typeof
是特别的。即使未声明变量,它也将返回“undefined”
。这是因为null===undefined/-->false
NS1===null
引用未定义的变量NS1,因此它引发异常
但是window.NS1===null
将计算为false,因为window.NS1未定义。而undefined不等于null
NS1作为未声明变量-->异常window.NS1作为未声明的属性-->未定义的这是因为
null===undefined/-->false
NS1===null
引用未定义的变量NS1,因此它引发异常
但是window.NS1===null
将计算为false,因为window.NS1未定义。而undefined不等于null
NS1作为未声明变量-->异常window.NS1作为未声明的属性-->未定义的属性--
NS1===null
--您试图检索不存在的变量值。typeof
不起作用。使用liketypeof window.NS1
如果将typeof
复选框移到|
的左侧,则不会因为短路评估而出现任何错误~If(typeof NS1=='undefined'| | NS1==null)
注意,这是一种特殊情况,只有全局变量可以作为某些对象(全局/窗口对象)的属性访问。函数中的变量不能作为属性访问,因此对于它们,如果不确定,则必须使用typeof。NS1===null
——您试图检索不存在的变量值。typeof
不是函数。使用liketypeof window.NS1
如果将typeof
复选框移到|
的左侧,则不会因为短路评估而出现任何错误~If(typeof NS1=='undefined'| | NS1==null)
注意,这是一种特殊情况,只有全局变量可以作为某些对象(全局/窗口对象)的属性访问。函数中的变量不能作为属性访问,因此对于它们,如果不确定,则必须使用typeof。