我知道检查变量是否未定义的最佳方法是
if ( typeof( something ) == "undefined")
我不明白的是什么时候是未定义的变量,什么时候是未定义的对象。例如,当我 console.log() 得到一个变量时
Object {detailedView: undefined}
我的问题是为什么我得到这个而不是一个普通的未定义。
我知道检查变量是否未定义的最佳方法是
if ( typeof( something ) == "undefined")
我不明白的是什么时候是未定义的变量,什么时候是未定义的对象。例如,当我 console.log() 得到一个变量时
Object {detailedView: undefined}
我的问题是为什么我得到这个而不是一个普通的未定义。
a
不是未定义的。它被定义了。它是一个对象。该对象恰好包含一个属性,即undefined
,但变量本身不是未定义的。
something
没有定义,所以它是undefined
.
这里有两件事:“值” undefined
,这是一个变量可以指向的值,当它被声明但尚未分配任何东西时(即var a;
),或者当它被分配了实际上没有值的东西时,或者存在,并且有字符串"undefined"
,这是一个类似于“monkey”或“collywobble”的字符串。
在您的条件中,您正在测试以查看typeof
运算符的结果是什么,它是一个字符串“对象”或“函数”,或者在这种情况下是“未定义”。这些只是词:
if(typeof a == "undefined")
和测试一样
if(a == undefined)
因此,当您 console.log 实际对象时,您会看到它有一个 value undefined
,而不是一个 string "undefined"
。
我相信您是在询问“未定义的变量”(从未声明的变量)和“未定义的值”(undefined
变量或属性中的值)之间的区别。
var
您使用关键字定义/声明一个变量:
var myVariable;
如果你这样做,该变量的值是undefined
:
console.log(myVariable); // undefined
如果你不声明一个变量,你就不能使用它:
console.log(myOtherVariable); // throws a ReferenceError
...除了typeof
:
typeof myOtherVariable == "undefined"; // true