本文摘自PHP中文网,作者醉折花枝作酒筹,侵删。
在js中,可以使用delete关键字在object中删除属性,语法格式为“delete object.属性”。delete操作符用于删除对象的某个属性,当delete操作符返回true时表示可以删除,返回false表示不能删除。
本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。
从对象上删除属性的语义正确方法是使用delete关键字。
给定对象
1 2 3 4 |
|
您可以使用以下命令从此对象中删除属性
1 |
|
它的工作方式还表示为:
1 2 3 |
|
将属性设置为undefined
如果您需要以非常优化的方式执行此操作,例如在循环中对大量对象进行操作时,另一种选择是将属性设置为undefined 。
由于其性质, delete的性能要比简单地重新分配给undefined 慢很多 ,比慢得多50倍。
但是,请记住,该属性不会从对象中删除。 它的值被擦除了,但是如果您迭代该对象,它仍然存在:
使用delete仍然非常快,只有在您有充分理由这样做时,才应研究此类性能问题,否则始终首选具有更清晰的语义和功能。
删除属性而不更改对象
扩展资料:
delete 操作符用于删除对象的某个属性。
语法:
直接使用delete操作符
1 |
|
例如:
1 2 3 4 5 6 7 8 |
|
返回值:
delete操作符具有返回值,返回值为布尔值,对于所有情况都是true,即使是删除不存在的属性也会返回true,还是如上代码,不防打印一下返回值看看
1 2 |
|
但是也有例外的情况(返回false),如果属性是不可配置属性(对于不可配置属性的概念,可以参考Object. defineProperty,我第一次听说这个概念的时候也有点蒙圈), 在非严格模式下,返回false,在严格模式下则会抛出语法错误的异常。
具体使用
1. 对象属性不存在
如上所述,如果删除对象不存在的属性,delete无效,但是返回值仍然为true
2. 原型链上存在该同名属性
如果delete操作符删除属性成功,则该属性将永远不存在,但是该对象原型链上存在该同名属性,则该对象会从原型链上继承该同名属性。但和内存并无关联,内存管理并不是delete操作符可以操作的,而且一点关系也没有。内存管理推荐MDN这篇文章
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 |
|
所以可以看出delete操作只会在自身的属性上起作用,这里能console出来'张三',是作用域链的原因,当实例本身无该属性的时候,就会去找它的protype身上有无该同名属性。
3. 使用var声明
使用var声明的属性(包括函数),不能从全局作用域或函数作用域中删除
在全局作用域中声明属性:
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 |
|
在函数作用域中声明属性(效果和在全局作用域中一样):
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 |
|
另外, 需要注意的是,在对象中定义的函数是可以删除的,和属性一样,比如
1 2 3 4 5 6 7 8 |
|
4. let和const声明的属性
相关阅读 >>
了解javascript中object.freeze()与const之间的区别
exports和module.expors之间有什么区别及联系?
更多相关阅读请进入《javascript》频道 >>
Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者