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
posted @ 2022-04-12 13:45  w0000  阅读(345)  评论(0编辑  收藏  举报