最近在看《JavaScript权威指南》,遇到delete,以前写代码的时候没用过,现整理书上的内容如下(内容略有删减,内容为手打,可能有部分错误):
delete运算符是个一元运算符,它将删除运算数所指定的对象的属性、数组元素或变 量。如果删除操作成功,它将返回true,如果运算数不能被删,它将返回false。 井非所有的属性和变量都是可以删除的,某些内部的核心属性和客户端属性不 能删除,用var语句声明的用户定义变星也不能被删除。如果delete使用的运算数是一个 不存在的属性,它将返回true下面 是一些使用该运算符 的例子:
delete运算符是个一元运算符,它将删除运算数所指定的对象的属性、数组元素或变 量。如果删除操作成功,它将返回true,如果运算数不能被删,它将返回false。 井非所有的属性和变量都是可以删除的,某些内部的核心属性和客户端属性不 能删除,用var语句声明的用户定义变星也不能被删除。如果delete使用的运算数是一个 不存在的属性,它将返回true下面 是一些使用该运算符 的例子:
var o={x:1,y:2};
delete o.x; //define a variable;initialize it to an ovject
typeof o.x; //delete one of the object properties;return true
delete o.x; //property does not exist;returns "undefined"
delete o; //can't delete a declared variable; returns false
delete 1; //can't delete an integer; retuns true
x =1; //implicitly declare a variable without var keyword
delete x; //can delete this kind of variable; returns true
x; //runtime error; x is not define
注意,删除属性变量或数组元素不只是把它们的值设置为undefined。当删除一个属
性后,该属性将不再存在。
delete所能影响的只是属性值,并不能影响被这些属性引用的对象,理解这一点很重
要。考虑如下的代码:
var my = new Object(); //create an object named "my"
my.hire = new Date(); //my.hire refers to a Date Object
ma.fire = my.hire; //my.fire refers to the same object
delete my.hire; //hire property is deleted; returns true
document.write(my.fire); //but my.fire still refers to the Date object
出处:《JavaScript权威指南》 第五版 机械工业出版社 第五章 第10节 P87