是
if( typeof myVar === "undefined" )
与
相同if( myVar===void(0) )
?
如果这些之间有一个最好的实践,那么它是什么?为什么?
答案 0 :(得分:1)
使用
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
进行比较会引发异常。