javascript:检查对象是否具有某个元素或属性的最佳方法?

时间:2017-09-26 11:20:14

标签: javascript object properties undefined

假设我有这个:

var person = { "name": "John Doe", "email": "john.doe@example.com" };

此对象只有两个名为nameemail的元素。有些人也有一个元素age,但这个人并不是。检查这个的最佳方法是什么?

  • if (person.age) { ... }
  • if (person.age != undefined) { ... }
  • if (person.age !== undefined) { ... }
  • if (typeof(person.age) != 'undefined') { ... }
  • if (person.hasOwnProperty('age')) { ... }

我知道所有这些都不做同样的事,例如如果if (person.age) 确实存在但agefalsenull或{{1},则''也会失败}}。而且我想知道是否有些人不会出错。

请注意,此处0已知是现有对象,但person可能存在也可能不存在。

3 个答案:

答案 0 :(得分:3)

让我们检查这些检查对象是否具有某种元素或属性的方法的可靠性:

如果Boolean(person.age)false

,则可能会失败
if (person.age) { ... }

如果person.agenullundefined

,则可能会失败
if (person.age != undefined) { ... }

如果person.ageundefined

,则可能会失败
if (person.age !== undefined) { ... }
if (typeof(person.age) != 'undefined') { ... }

另一方面, hasOwnProperty()方法返回boolean,指示对象是否具有指定的属性作为自己的(不是继承的)属性。所以它不依赖于person.age属性的值。所以这是最好的方式

if (person.hasOwnProperty('age')) { ... }

如果你想进一步检查一个对象是否有一个可迭代的属性(所有属性包括自己的属性以及继承的属性),那么使用for..in循环将给你想要的结果。

答案 1 :(得分:-2)

您可以使用Object.hasOwnProperty()。查看文档here

答案 2 :(得分:-2)

您可以使用hasOwnProperty来检查是否存在特定的键或属性。

var person = { "name": "John Doe", "email": "john.doe@example.com" };
console.log(person.hasOwnProperty('age')) //false

var person = { "name": "John Doe", "email": "john.doe@example.com", "age": 18 };
console.log(person.hasOwnProperty('age')) //true

如果您使用(person.age),如果值为false或为空,则将给出false;如果存在age属性且存在自己的属性检查属性,则它将为null