如何在 JavaScript 中确定对象是否具有给定属性

2022-08-29 23:43:41

如何确定一个对象是否具有已定义的属性,而不考虑 ?xyx.y

我目前正在使用

if (typeof(x.y) !== 'undefined')

但这似乎有点笨拙。有没有更好的方法?


答案 1

对象具有属性:

如果要测试对象本身(不是其原型链的一部分)上的属性,则可以使用 .hasOwnProperty()

if (x.hasOwnProperty('y')) { 
  // ......
}

对象或其原型具有属性:

也可以使用 in 运算符来测试继承的属性。

if ('y' in x) {
  // ......
}

答案 2

如果您想知道对象是否物理上包含属性@gnarf的答案将完成工作。hasOwnProperty

如果想知道该属性是否存在于任何位置,无论是在对象本身上还是在原型链中,都可以使用 in 运算符

if ('prop' in obj) {
  // ...
}

例如:

var obj = {};

'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically