Netherspite

delete操作符用于删除对象的某个属性。对于通常情况都是true,除非删除的属性是一个自己不可配置的属性,这种情况下非严格模式返回false,严格模式会抛出异常。

  • 若删除的属性不存在,delete不会起任何作用但会返回true

  • 如果对象原型链上有与待删除属性同名属性,删除操作只会删除对象本身的属性,原型链上的属性仍存在

  • 任何使用var声明的属性不能从全局作用域或函数的作用域中删除,不能删除任何在全局作用域中的函数,在对象中的函数是可以用delete删除的

    var x = 1;
    delete x; //false
    x; //1
    function y(){}
    delete y; //false
    typeof y; //"function"
  • letconst声明的属性不能从它被声明的作用域中删除

  • delete删除数组元素后,该位置会变成空值(empty

  • 在eval中通过var定义的变量,可以在全局环境中通过delete删除:

    eval('var a = 1');
    eval('function b(){}');
    delete a; //true
    delete b; //true
    typeof a; //undefined
    typeof b; //undefined

参考链接

  1. Understanding delete
  2. delete操作符
  3. delete 0:JavaScript中到底有什么是可以销毁的

 评论