美文网首页我爱编程
深入学习js delete操作符

深入学习js delete操作符

作者: 淘皮渊 | 来源:发表于2018-03-28 20:45 被阅读0次

    一句话概括:delete操作符会删除对象本身的属性

    基本使用

    var o = {a: "a"};
    
    console.log(o.a); // "a"
    
    delete o.a;
    
    console.log(o.a) // undefined
    

    从例子中可以看出,删掉的属性,再次访问就会返回undefined。delete操作符是有'副作用(Side Effect)'的。delete操作符会返回true/false。 如果是一个合法操作,就返回true,反之返回false。

    原型链

    那么,删掉的元素,再次访问就一定会是undefined吗?答案是否定的。

    function F() {}
    F.prototype = {a: "a"};
    
    const f1 = new F();
    console.log(f1.a) // "a"
    
    delete f1.a;
    console.log(f1.a) // "a"
    
    const f2 = new F()
    f2.a = "b";
    console.log(f2.a) // "b"
    delete f2.a;
    console.log(f2.a) // "a"
    

    第一个例子中,删除一个对象的原型上的属性,再次访问后还是得到原来的值。
    第二个例子中,对象把原型上的属性进行了重新赋值,然后删除,再次访问后还是得到原型上的值。
    因此delete操作符只针对对象本身,不会影响到原型链上的属性。

    Reference:

    1. https://en.wikipedia.org/wiki/Side_effect_(computer_science)
    2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
    3. https://github.com/getify/You-Dont-Know-JS/blob/master/types%20%26%20grammar/ch5.md

    相关文章

      网友评论

        本文标题:深入学习js delete操作符

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