我爱编程

深入学习js delete操作符

2018-03-28  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读