一句话概括: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: