JavaScript:检查对象是否具有特定元素或属性的最佳方法?

5
假设我有以下代码:
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)也会失败,如果age存在但它是falsenull''0。我想知道是否有些是完全错误的。

请注意,这里已知person是一个现有的对象,但person.age可能存在也可能不存在。


1
对我来说 person.hasOwnProperty('age') :) 属性的 是另一回事! - Dhaval Marthak
2
那么你想要检查什么?是检查属性是否存在吗?正如你在问题标题中所提到的“具有特定值”,这将是完全不同的事情。 - Bergi
我猜 if (typeof person.age == "number") 是你要找的。 - Bergi
@Bergi 对,那很令人困惑,我把标题中的“value”改成了“element”。是的,我的意思只是检查属性是否存在。 - RocketNuts
@RocketNuts 然后使用 hasOwnPropertyin(取决于您是否关心它是自有属性)。如果您还关心属性的类型,请使用 typeof - Bergi
3个回答

6

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

如果 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() 方法返回一个布尔值,指示对象是否具有指定属性作为自身(非继承)属性。因此,它不依赖于 person.age 属性的值。所以这是最好的方式。
if (person.hasOwnProperty('age')) { ... }

如果您想进一步检查对象是否具有可迭代属性(包括自身属性以及继承的属性),那么使用 for...in 循环可以得到所需结果。

-3

你可以使用 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),即使 age 属性存在并且具有自己的属性检查,但如果该值为 false 或为空或 null,则会返回 false,请检查属性是否存在。

3
OP已经知道这一点,它在他的选项清单中。他为什么要使用 hasOwnProperty - Bergi
1
我看到了编辑,但仍然缺少解释。 - Bergi

-3
你可以使用Object.hasOwnProperty()方法。在这里查看文档here

3
楼主已经知道了,它在他的选项列表中。为什么他应该使用hasOwnProperty - Bergi

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