对变量练习的未定义检查

时间:2014-03-18 13:33:34

标签: javascript undefined void

if( typeof myVar === "undefined" )

相同
if( myVar===void(0) )

如果这些之间有一个最好的实践,那么它是什么?为什么?

1 个答案:

答案 0 :(得分:1)

引自MDN Docs for undefined

  

使用typeof的一个原因是它不会抛出错误   变量尚未定义。

// x has not been defined before
if (typeof x === 'undefined') { // evaluates to true without errors
   // these statements execute
}

if(x === undefined){ // throws a ReferenceError

}
     

但是,应该避免使用这种技术。 JavaScript是一种静态范围的语言,因此知道是否定义了变量可以是   通过查看它是否在封闭的上下文中定义来读取。唯一的   异常是全局范围,但全局范围是绑定的   全局对象,因此检查全局变量的存在   上下文可以通过检查上的属性的存在来完成   全局对象(例如,使用in运算符)。

来自同一文件的void section

var x;
if (x === void 0) {
   // these statements execute
}

// y has not been defined before
if (y === void 0) {
   // throws a ReferenceError (in contrast to `typeof`)
}

<强>结论

因此,当您使用typeof检查变量的值是否为undefined时,它不会抛出异常。但与undefined直接比较或与void 0进行比较会引发异常。