284 javascript object
如何确定对象是否具有x
已定义的属性y
,而不管其值是x.y
多少?
我正在使用
if (typeof(x.y) !== 'undefined')
Run Code Online (Sandbox Code Playgroud)
但这似乎有点笨拙.有没有更好的办法?
gna*_*arf 539
如果您正在测试对象本身的属性(不是其原型链的一部分),您可以使用.hasOwnProperty()
:
if (x.hasOwnProperty('y')) {
// ......
}
Run Code Online (Sandbox Code Playgroud)
您可以使用in
运算符来测试继承的属性.
if ('y' in x) {
// ......
}
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 76
如果你想知道对象是否物理上包含属性@ gnarf的回答使用hasOwnProperty
将做的工作.
如果您想知道属性是存在于对象本身还是原型链中的任何位置,您可以使用in
运算符.
if ('prop' in obj) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
例如.:
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
Run Code Online (Sandbox Code Playgroud)
nac*_*son 15
Underscore.js或Lodash
if (_.has(x, "y")) ...
Run Code Online (Sandbox Code Playgroud)
:)
jps*_*ons 14
你可以这样修剪一下:
if ( x.y !== undefined ) ...
Run Code Online (Sandbox Code Playgroud)
小智 7
我的原始代码的一个功能
if ( typeof(x.y) != 'undefined' ) ...
Run Code Online (Sandbox Code Playgroud)
在某些情况下可能有用的是使用它是否安全x
.使用gnarf的答案中的任何一种方法,首先应该测试x
是否存在任何疑问.
因此,也许所有三种方法都有其中一个方法.
包括
Object.keys(x).includes('y');
Run Code Online (Sandbox Code Playgroud)
该Array.prototype.includes()
方法确定数组的条目中是否包含某个值,并根据需要返回 true 或 false。
和
Object.keys()
返回一个字符串数组,表示给定对象的所有可枚举属性。
.hasOwnProperty()
和 ES6+ ?.
-可选链如:if (x?.y)
也是非常好的 2020+ 选项。
归档时间: |
|
查看次数: |
231646 次 |
最近记录: |