for in 的问题

2023-12-20 00:05:16 浏览数 (1)

我们有一个 Obj1 的实例。该实例具有名称和年龄属性。当我们打印 obj1 时,它返回该对象的实例属性,仅返回名称,而不返回年龄。然而,Obj1 的原型也有一个属性 Age,并且该属性不能通过 obj1 的实例直接访问。

代码语言:javascript复制
function obj1(){
    this.name= "myName";
}
obj1.prototype.age = 10;
const i = new obj1();
console.error(i);
// obj1 { name: 'myName' }

但是当我们使用 for...in 循环时。

代码语言:javascript复制
for(let prop in i){
   console.error(prop); 
}
// name and age both property is present

for...in 循环的问题在于它不仅返回对象的实例属性,还返回它通过原型继承的所有属性。

代码语言:javascript复制
// 解决方案:我们可以使用 hasOwnProperty 方法来判断实例属性。
for(let prop in i){
    if(i.hasOwnProperty(prop)) console.error(prop); 
}

我正在参与 2023 腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞