JavaScript 检查对象中是否存在属性
您可能需要确定某个对象是否具有特定属性。
假设我们有一个用户对象。可以选择设置 email 属性。如果没有设置,我们希望显示一个表单,以便用户填写他们的邮箱地址。
我们如何确定这个字段是否存在?
const userOne = {
name: 'Chris Bongers',
email: 'info@daily-dev-tips.com',
};
const userTwo = {
name: 'John Do',
};
要回答这个问题,有几种方法可以实现。我们来看看最常见的三种。
使用 hasOwnProperty 来判断对象是否具有属性
通过使用hasOwnProperty
我们可以评估一个对象是否具有Own
属性。
让我们看看它如何处理我们的示例数据。
console.log(userOne.hasOwnProperty('email'));
// Returns: true
console.log(userTwo.hasOwnProperty('email'));
// Returns: false
完美!不过使用这个方法有个问题:它只适用于Own
属性,不适用于扩展对象属性。
你可能知道,对象自带toString
方法,如果我们尝试检查该方法是否存在,它将返回 false。(尽管该方法确实存在)
console.log(userOne.toString());
// Returns: [object Object]
console.log(userOne.hasOwnProperty('toString'));
// Returns false
使用 in 来判断对象是否具有属性
检查对象是否具有属性的另一种更明确的方法是使用in
。
这个可以检查自己的和继承的属性。
console.log('email' in userOne);
// Returns: true
console.log('email' in userTwo);
// Returns: false
console.log('toString' in userOne);
// Returns: true
使用 undefined 来判断对象是否具有属性
最后一种方法是使用未定义检查。此方法适用于省略的属性,但如果属性存在但值未定义,则可能会带来麻烦。
console.log(userOne.email !== undefined);
// Returns: true
console.log(userTwo.email !== undefined);
// Returns: false
console.log(userOne.toString !== undefined);
// Returns: true
现在让我们看看下面的例子中发生了什么:
const userThree = {
name: 'Steve Stevenson',
email: undefined,
};
console.log(userThree.email !== undefined);
// Returns: false
支票是可以接受的,但这不是我们想要的。
结论
当试图找出一个对象是否具有特定属性时,我们需要考虑我们想要的安全性。
我一般不建议使用该undefined
支票。
如果仅评估Own
属性,则它hasOwnProperty
是一种固体溶液。
但您可能希望安全起见并使用in
检查来确定对象是否具有属性。
感谢您的阅读,让我们联系起来!
感谢您阅读我的博客。欢迎订阅我的电子邮件简报,并在Facebook或Twitter上与我联系。
文章来源:https://dev.to/dailydevtips1/javascript-check-if-property-exists-in-object-57ed