!obj[key] 是检查 JavaScript 中对象的 属性 是否存在的好习惯吗?
Is !obj[key] a good practice to check the existence of an object's property in JavaScript?
我时不时地看到这个模式:
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 未定义的方法之间的性能比较,请检查此 reference
你是对的,如果你正在检查 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
我时不时地看到这个模式:
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 未定义的方法之间的性能比较,请检查此 reference
你是对的,如果你正在检查 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