在循环中使用hasOwnProperty
毫无意义,因为对象将始终具有属性?
例如:
const fruits = {
apple: 28,
orange: 17,
pear: 54,
}
for (let property in fruits) {
if (fruits.hasOwnProperty(property)) {
console.log(fruits[property]);
}
}
答案 0 :(得分:7)
如果您要处理的是一个不能从另一个对象继承的普通对象(例如您的问题中的代码),是的,则不需要进行检查。如果要从另一个对象继承继承的对象,它将很有用。例如:
const fruit = {
isEdible: true
}
const apple = Object.create(fruit);
apple.color = 'green';
for (var property in apple) {
if (apple.hasOwnProperty(property)) {
console.log(apple[property]);
}
}
在这种情况下,需要进行hasOwnProperty
检查,以确保仅for..in
对象上的console.log
属性仅在apple
对象上直接循环-否则,对象apple
继承的属性(即fruit
)也将被打印:
const fruit = {
isEdible: true
}
const apple = Object.create(fruit);
apple.color = 'green';
for (var property in apple) {
console.log(apple[property]);
}
在大多数情况下,最好直接使用Object.keys
(或Object.entries
或Object.values
)代替,这将直接遍历对象上的属性 (忽略继承的属性):
const fruit = {
isEdible: true
}
const apple = Object.create(fruit);
apple.color = 'green';
Object.values(apple).forEach((value) => {
console.log(value);
});
对于您的代码,该代码使用的是不继承自另一个对象的普通对象文字(除了Object
之外,它没有任何可枚举的属性),它没有任何区别-< em>,但是功能性Object方法通常比for..in
循环(许多linters禁止使用)循环要好得多