《JS权威指南学习总结--6.3删除属性》

内容要点:

一.delete运算符可以删除对象的属性。它的操作数应当是一个属性访问表达式。让人感到意外的是,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性:

     delete book.author;  //book不再有属性author

     delete book["main title"]; //book也不再有属性"main title"

二.delete运算符只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象)。

     当delete表达式删除成功或没有任何副作用(比如删除不存在的属性)时,它返回true。如果delete后不是一个属性访问表达式,delete同样返回true。

     delete不能删除那些可配置为false的属性(尽管可以删除不可扩展对象的可配置属性)。某些内置对象的属性是不可配置的,比如通过变量声明和函数声明创建的全局对象的属性。在严格模式中,删除一个不可配置属性会报一个类型错误。在非严格模式中,在这些情况下的delete操作会返回false。

     delete Object.prototype;  //不能删除,属性是不可配置的

     var x=1; //声明一个全局变量

     delete this.x;  //不能删除这个属性

     function f(){}   //声明一个全局函数

     delete this.f;     //也不能删除全局函数

    当在非严格模式中删除全局对象的可配置属性时,可以省略对全局对象的引用,直接在delete操作符后跟随要删除的属性名即可:

    this.x=1; //创建一个可配置的全局属性(没有用var)

    delete x;  //将它删除

    然而在严格模式中,delete后跟随一个非法的操作数(比如x),则会报一个语法错误,因此必须显示指定对象及其属性:

    delete x; //在严格模式下报语法错误

     delete this.x; //正常工作

原文地址:https://www.cnblogs.com/hanxuming/p/5791111.html