如何在JavaScript中检查对象是否具有特定属性?

1818

如何在JavaScript中检查对象是否具有特定属性?

考虑以下代码:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

那是最好的做法吗?


31
我写了一个 jsperf 测试,用大家的答案来看哪个最快:http://jsperf.com/dictionary-contains-key - styfle
('propertyName' in Object) ? '属性存在' : '属性不存在' - Mohan Ram
2
@styfle 感谢你提供的jsperf测试。对我来说,“in”和“hasOwnProperty”的速度比其他方法慢得多(慢了98%)。我对“hasOwnProperty”较慢并不感到惊讶,但我对“in”较慢感到惊讶。 - evanrmurphy
3
有一个新的第三阶段提案,Object.hasOwn,它解决了Object.prototype.hasOwnProperty的一些问题。 - Sebastian Simon
32个回答

0

迭代对象自身属性的更好方法:

如果您想在不使用hasOwnProperty()检查的情况下迭代对象的属性, 请使用for(let key of Object.keys(stud)){}方法:

for(let key of Object.keys(stud)){
  console.log(key); // will only log object's Own properties
}

完整示例及与for-in with hasOwnProperty()的比较

function Student() {
  this.name = "nitin";
}

Student.prototype = {
  grade: 'A'
}

let stud = new Student();

// for-in approach
for(let key in stud){
  if(stud.hasOwnProperty(key)){
    console.log(key); // only outputs "name"
  }
} 

//Object.keys() approach
for(let key of Object.keys(stud)){
  console.log(key);
}

0

x?.key 返回 1 如果 x.key 存在,否则返回 undefined


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接