JavaScript变量定义混乱

JavaScript变量定义混乱,javascript,Javascript,我有两个javascript代码。两者都检查varable是否等于null或变量类型是否未定义。但在一种情况下,我会出错,而在另一种情况下,我不会出错 代码1: if (NS1 === null || typeof (NS1) === 'undefined') { ... } 代码2: if (window.NS1 === null || typeof (window.NS1) === 'undefined') { ... } 对于代码1,我得到一个错误 NS1未定义 而

我有两个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。所以在这两种情况下我都会出错

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

尝试访问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
不起作用。使用like
typeof window.NS1
如果将
typeof
复选框移到
|
的左侧,则不会因为短路评估而出现任何错误~
If(typeof NS1=='undefined'| | NS1==null)
注意,这是一种特殊情况,只有全局变量可以作为某些对象(全局/窗口对象)的属性访问。函数中的变量不能作为属性访问,因此对于它们,如果不确定,则必须使用typeof。
NS1===null
——您试图检索不存在的变量值。
typeof
不是函数。使用like
typeof window.NS1
如果将
typeof
复选框移到
|
的左侧,则不会因为短路评估而出现任何错误~
If(typeof NS1=='undefined'| | NS1==null)
注意,这是一种特殊情况,只有全局变量可以作为某些对象(全局/窗口对象)的属性访问。函数中的变量不能作为属性访问,因此对于它们,如果不确定,则必须使用typeof。