gpt4 book ai didi

javascript - 在 JavaScript 中遍历对象键时使用 "hasOwnProperty()"有好处吗

转载 作者:行者123 更新时间:2023-11-29 10:04:34 24 4
gpt4 key购买 nike

我试图理解在遍历对象键时使用 hasOwnProperty() 检查的目的。据我所知,在两种情况下都会对每个对象属性(不多也不少)执行迭代:使用 hasOwnProperty() 或不使用。例如,在下面的代码中,使用 hasOwnProperty() 检查和不检查的结果是相同的:

const obj = {
prop1: [],
prop2: {},
prop3: "",
prop4: 0,
prop5: null,
prop6: undefined
}

const resultWithHasOwnProperty = [];
const resultWithoutHasOwnProperty = [];

for(key in obj) {
if(obj.hasOwnProperty(key)) {
resultWithHasOwnProperty.push(obj[key])
}
}

for(key in obj) {
resultWithoutHasOwnProperty.push(obj[key])
}

console.log("Result WITH hasOwnProperty check: ", resultWithHasOwnProperty);
console.log("Result WITHOUT hasOwnProperty check: ", resultWithoutHasOwnProperty);

所以我的问题是:为什么以及何时应该使用 hasOwnProperty() 检查?

我将重新表述我的问题:如果没有 hasOwnProperty() 检查,我们将始终遍历所有现有属性吗?

注意,这个问题并不是真正的重复问题。

最佳答案

文档指出:

The hasOwnProperty() method returns a boolean indicating whether the object has the specified property as own (not inherited) property.

hasOwnProperty 方法确保您正在检查的属性直接在对象的实例上,而不是从其原型(prototype)链继承。如果不检查,它会循环遍历原型(prototype)链上的每个属性。

const obj = {
prop1: [],
prop2: {},
prop3: "",
prop4: 0,
prop5: null,
prop6: undefined
}

obj.prototype = {foo: 'bar'};

P/s:注意:

JavaScript 不保护属性名hasOwnProperty;因此,如果一个对象可能具有具有此名称的属性,则有必要使用外部 hasOwnProperty 来获得正确的结果:

var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

所以你需要使用:

Object.prototype.hasOwnProperty.call(foo, 'bar');

关于javascript - 在 JavaScript 中遍历对象键时使用 "hasOwnProperty()"有好处吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480255/

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