有时,我看到这样的模式:
if (!obj[key]) {
// key does not exist inside object
obj[key] = ...
} else {
// maybe do something else with obj[key]
}
,但我发现这是非常错误的。如果obj[key]的值是false
或''
呢?那么代码对我来说就没有任何意义了。
为什么我经常看到这种情况?为什么人们不使用.hasOwnProperty()
来检查key
是否作为一个对象的属性存在?
您应该使用in
操作符:
"key" in obj // true, regardless of the actual value
如果你特别想测试对象实例的属性(而不是继承的属性),使用hasOwnProperty:
obj.hasOwnProperty("key") // true
对于在,hasOwnProperty和key未定义的方法之间的性能比较,请查看此参考
你是对的,如果你正在检查key
道具是否存在,那么绝对不应该使用它,有更好的选择,例如.hasOwnProperty
或in
操作符,例如:
const obj = { a: '' }
console.log('is key a in obj?', obj.hasOwnProperty('a'))
>>> true
console.log('is key a in obj?', 'a' in obj)
>>> true
console.log('is key a in obj?', Boolean(obj['a']))
>>> false // it's wrong, like u mentioned
console.log('is key b in obj', obj.hasOwnProperty('b'))
>>> false
console.log('is key b in obj', 'b' in obj)
>>> false
console.log('is key b in obj', Boolean(obj['b']))
>>> false