delete运算符可以删除对象的属性,它的操作数应当是一个属性访问表达式,
var book={
"author":"yang",
"main title":"This a boy"
};
delete book.author; //book不再有属性author
delete book["main title"] //book不再有属性main title
delete运算符只能删除 对象的自有属性,不能删除从原型上继承过来的属性,要删除继承属性,必须在这个对象的原型中删除。
让人意外的是,delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。
var obj={x:{x1:0}};
var obj2=obj.x;
delete obj.x;
console.log(obj2.x1); //返回0;
执行这段代码后obj2.x1的值依然是0;由于删除的属性引用依然存在,因此在JavaScript的某些实现中,可能因为这种不严谨的代码造成内存泄漏。所以在销毁对象的时候,要遍历属性中的属性,依次删除。
delete不能删除不可配置的属性,使用var 创建的属性是不可配置的属性,如:
var str="JavaScript";
delete this.str; // 报错或返回false
this.str2="HTML5";
delete this.str2; str2为可配置属性,可以使用delete删除