美文网首页
关于for..in..你必须知道的事

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

作者: 被代码耽误的裁缝 | 来源:发表于2022-05-16 12:09 被阅读0次

    先说结论: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..你必须知道的事

          本文链接:https://www.haomeiwen.com/subject/qcoiurtx.html