gpt4 book ai didi

javascript - 使用 hasOwnProperty 检查循环遍历对象?

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:02 25 4
gpt4 key购买 nike

在循环中使用 hasOwnProperty 是否毫无意义,因为对象总是有属性?

例如:

const fruits = {
apple: 28,
orange: 17,
pear: 54,
}

for (let property in fruits) {
if (fruits.hasOwnProperty(property)) {
console.log(fruits[property]);
}
}

最佳答案

如果您正在处理一个不从另一个对象继承的普通对象,例如您问题中的代码,是的,检查将是不必要的。当您迭代一个继承的对象时,它就会有用。例如:

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.entriesObject.values) ,它将直接在对象上迭代属性(忽略继承的属性):

const fruit = {
isEdible: true
}
const apple = Object.create(fruit);
apple.color = 'green';

Object.values(apple).forEach((value) => {
console.log(value);
});

对于您的代码,它使用不从另一个继承的普通对象文字(除了 Object,它没有任何可枚举的属性),它不会生成差异 - 但是功能性对象方法通常仍然比 for..in 循环(许多 linters 禁止的)更好用

关于javascript - 使用 hasOwnProperty 检查循环遍历对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com