ste*_*jay 22 javascript object
所以在SO上有一些问题可以解答如何检查对象上的属性是否存在.示例答案是使用Object.prototype.hasOwnProperty().
但是,如何检查可能未定义的对象的属性?
如果要尝试直接检查未定义对象上是否存在属性,那么它将是一个引用错误.
在语义上,直接检查代码似乎更好if (obj.prop) //dosomething- 它显示更清晰的意图.有没有办法实现这个目标?优选地,是否有内置的Javascript方法来执行此类操作或按照惯例?
Motive:一个包添加了属性user.session.email - 但我正在检查是否存在电子邮件,而不是会话,尽管会话可能不存在.
更新:许多答案都说使用&&运算符进行短路.我知道这是一个可能的解决方案,但它并不完全是所期望的,因为我们似乎正在使用JS对象语法 - 也就是说,虽然你想真正检查一个对象的属性,你被迫检查对象是否存在以便这样做.
注意标记为已关闭为什么标记为已关闭?假设这是重复的链接可能不会产生相同的答案.我们正在寻找一种更好的,更具语义性的解决方案,并且标记这种封闭使得"嵌套"==="可能未定义"的假设.
这个问题是有争议的: 因为我现在无法回答我自己的问题.截至最近,这里提出了一项提案,可以解决这个问题.同样,问题需要一个更具语义性的解决方案,如提案中所示.
Set*_*eth 20
如果您确定父对象存在,那么:
if(obj && obj.key) {
console.log(obj.key);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果obj不存在,这个例子将会失败.
if (obj && obj.key) {
console.log(obj.key);
}Run Code Online (Sandbox Code Playgroud)
...这就是为什么你可能想检查在检查属性时是否定义了对象的原因.这可确保在命中条件且尚未设置属性的对象时不会出现运行时错误.
if(typeof obj != "undefined" && obj.key) {
console.log('you will not see this logged')
}Run Code Online (Sandbox Code Playgroud)
您会注意到上面的示例不会引发异常.
var obj = {key: 1};
if(typeof obj != "undefined" && obj.key) {
console.log('we have obj! and val is : ' + obj.key)
}Run Code Online (Sandbox Code Playgroud)
这是一种更具防御性的方法,但它允许移植性.如果要将逻辑提取到模块中以供重用,您可能需要检查对象是否存在,或者从应用程序中可能不一定要关注的区域中冒出不必要的错误.
Nis*_*tha 10
如果你想检查obj和prop存在(就像你在评论中提到的那样),你必须这样做:
if(obj && obj.hasOwnProperty('some')) 要么 if(obj && obj.some)
如注释中所述,如果obj未定义,则会抛出错误.更好的比较是:
if(typeof obj != "undefined" && obj.hasOwnProperty('some'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29072 次 |
| 最近记录: |