关于for..in..你必须知道的事

先说结论:for..in..会遍历对象的自有属性及其原型链上的属性,所以要保证预期的话可以用obj.hasOwnProperty(key)去判断是否是对象的自有属性。

我们知道for..in..可以用来遍历对象,那么遍历出来的属性是否是你的预期呢?什么时候超出了你的预期?我们来看下面的代码

function Person(name) {
    this.name = name;
}

Person.prototype.eat = function(){
    console.log("eat");
}

let xiaoming = new Person('xiaoming');

function Doctor(age) {
    this.age = age;
}

Doctor.prototype = xiaoming;

let xiaohong = new Doctor(18);

console.log(xiaohong);

我们采用了原型链的继承方式,打印出来的xiaohong是{age: 18}

当我们使用for..in..遍历时,预期如下:

let arr = [];
for(let key in xiaohong){
    arr.push(key);
}
console.log(arr);
// 预期打印结果:['age']

实际的打印结果:['age', 'name', 'eat']

结论:

for..in..会遍历对象的自有属性及其原型链上的属性,所以要保证预期的话可以用obj.hasOwnProperty(key)去判断是否是对象的自有属性

你可能感兴趣的:(关于for..in..你必须知道的事)