js delete
delete() delete 操作符用于删除对象的某个属性
var, let以及const创建的不可设置的属性不能被delete操作删除
不可配置属性configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认值为true。
变量
- delete 不能删除var,let,const声明的变量
var x = 0;
delete x//false
- delete 可以删除隐式全局变量//属于可删除属性
x = 0
delete x//true
但是有一点例外,就是通过 eval 执行的代码中,通过var声明的变量虽然与正常的var声明变量同属于Global对象,但它们不具有DontDelete特性,能被删除。
eval("var x = 36;");
x; // 42
delete x;
x; // undefined
但是这也有一点例外,eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。
eval("(function() { var x = 42; delete x; return x; })();");
// 返回 42
detele 作用于对象的属性
- prototype中声明的属性无法被delete
- 对象的预定义属性也无法删除。 可以认为这类属性带有DontDelete的特性。
var re = /abc/i;
delete re.ignoreCase;
re.ignoreCase; // true, ignoreCase无法删除
- 只是将属性与对象解除绑定
- delete操作符和释放内存无关,它只是断开了对象和属性的引用关系。只有当没有其他变量指向你删除的属性的引用时,这个属性所处的内存区块才会被下一次垃圾回收时释放。
- delete 操作只会在自身的属性上起作用,如果对象的原型链上有与该属性同名的属性,那么删除该属性后,对象会使用原型链上的属性
总结:delete用来删除js对象的属性,不能删除任何变量(全局、局部、原型链中的变量)。
https://zhuanlan.zhihu.com/p/149975274
本文来自博客园,作者:w0000,转载请注明原文链接:https://www.cnblogs.com/w0000/p/16134809.html