javascript的delete属性

总结

  • delete 只是断开了属性和宿主当关系,而不会去操作宿主中的属性。[^1]
  • delete 只能删除自有属性,不能删除继承属性,所以 protorype 上的属性不能通过删除对象上的属性删除
    《Javascript 权威指南》6.3 章

场景

当需要删除对象的属性时,我们会使用delete关键字来删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var man = {
name: "zhangsan",
};
var person = {
user: man,
age: 20,
};
var zhangsan = person.user;
//删除name属性
delete person.user;

//输出person.user
console.log(person.user); //undefined
console.log(zhangsan.name); //zhangsan

上面的例子说明了,只是断开了属性和宿主的联系。

1
2
3
4
5
6
7
8
function Person() {
this.name = "zhangsan";
}
Person.prototype.name = "lisi";
var man = new Person();
console.log(man.name); //zhangsan
delete man.name;
console.log(man.name); //lisi

上述代码说明,delete 只能删除对象自己的属性,不能删除继承的属性。

通过注释掉this.name更能说明问题,上面将输出都是lisi,因为实例自己没有自己的 name 属性,输出的是 prototype 上的属性,即使 delete 掉 man.name,protorype 上的属性仍然存在。

文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/02/28/javascript%E7%9A%84delete%E5%B1%9E%E6%80%A7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏