有时候我们需要判断一个变量的状态,如果变量的值为“真”(传给Boolean()
函数返回true
)就执行某些操作,如果变量未声明或值为“假”则执行另一些操作。
在JS中,用typeof
查询已声明未赋值和未声明的变量类型,返回值都是undefined
,所以我们很容易把两者混为一谈。

因而编写出这样的代码:
if ( a ) {
console.log( a );
} else {
console.log( "a is undefined!" );
}
这段代码的意思是如果存在变量a
且a
的值为“真”,就输出a
的值,否则输出一段字符串。
这样判断变量状态是不严谨的!
虽然当a
的值为“假”时,代码能正常工作;但当a
未声明时,代码会直接报错!而不会像想象的那样输出"a is undefined!"
。

有些人对此不解,用typeof
测试已声明未赋值的变量和未声明的变量,明明返回的类型都是undefined
,为什么偏偏要对未声明的变量报错呢?
原因很简单:typeof
操作符把未声明也归类进了undefined
(未定义),但这只是typeof
单方面的行为,其他语句仍然把未声明和未定义当作两回事,操作未声明的变量仍然会妥妥地报错!
解决办法也很简单:既然只有typeof
操作符把未声明和未定义混为一谈,那么安全做法就是让typeof
来判断变量状态。
if ( typeof a !== "undefined" ) {
console.log( a );
} else {
console.log( "a is undefined!" );
}
这样不管a
有没有声明,就都不会报错了!