检测未定义的对象属性

马特·谢泼德(Matt Sheppard):

检查JavaScript中的对象属性是否未定义的最佳方法是什么?

欧文:

检查属性值是否为特殊值的通常方法undefined是:

if(o.myProperty === undefined) {
  alert("myProperty value is the special value `undefined`");
}

要检查对象是否实际上没有这样的属性,并因此undefined在尝试访问它时默认情况下将返回

if(!o.hasOwnProperty('myProperty')) {
  alert("myProperty does not exist");
}

检查与标识符关联的值是否为特殊值undefined或者尚未声明该标识符。注意:此方法是引用未声明(但值不同于undefined)标识符的唯一方法,且不会出现早期错误:

if(typeof myVariable === 'undefined') {
  alert('myVariable is either the special value `undefined`, or it has not been declared');
}

在ECMAScript 5之前的JavaScript版本中,全局对象上名为“ undefined”的属性是可写的,因此,foo === undefined如果不小心重新定义了简单检查,则其行为可能会出乎意料。在现代JavaScript中,该属性为只读。

但是,在现代JavaScript中,“未定义”不是关键字,因此函数内的变量可以命名为“未定义”并隐藏全局属性。

如果您担心这种(不太可能)边缘情况,可以使用void运算符获取特殊undefined值本身:

if(myVariable === void 0) {
  alert("myVariable is the special value `undefined`");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章