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

标签 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) 如果 age does 存在但它是 falsenull< 也会失败''0。我想知道是否有些人是不是完全错了。

请注意,已知 person 是此处存在的对象,但 person.age 可能存在也可能不存在。

最佳答案

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

如果 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 循环将给你想要的结果。

关于javascript:检查对象是否具有特定元素或属性的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425072/

相关文章:

javascript - Angular 4 中的 Observable 调用可以像 jquery 的同步 ajax 方式一样吗?

javascript - 集成 Particle.js 和 Bootstrap

iphone - Objective-C 属性 setter 如何发出失败信号?

java - 在类路径中找不到 Camel 属性文件

C# Winforms 消息框属性

javascript - 根据按钮列表中最长的文本设置按钮大小

javascript - 有没有办法通过firebug和chrome检测用户是否隐藏了div?

javascript - 有没有办法在一行中编写 javascript 对象数组?

java - Json 和多个用户定义的对象错误

javascript - 如何在javascript中过滤对象数组?