JS如何判断一个变量状态

有时候我们需要判断一个变量的状态,如果变量的值为“真”(传给Boolean()函数返回true)就执行某些操作,如果变量未声明或值为“假”则执行另一些操作。

在JS中,用typeof查询已声明未赋值和未声明的变量类型,返回值都是undefined,所以我们很容易把两者混为一谈。

因而编写出这样的代码:

if ( a ) {
    console.log( a );
} else {
    console.log( "a is undefined!" );
}

这段代码的意思是如果存在变量aa的值为“真”,就输出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有没有声明,就都不会报错了!