javascript 属性删除

delete运算符可以删除对象的属性,delete仅仅是断开属性和宿主对象的联系,而不会去删除属性中的属性。

delete运算符只能删除自有属性不能删除对象原型链上的属性(需要从定义这个属性的原型对象上删除)

	a={p:{x:1}}
	b=a.p
	delete a.p	//这段代码执行完后b.x的值仍然是1,对象属于引用类型,这里能访问b.x也是正常。
	delete Object.prototype //false
	Object.getOwnPropertyDescriptor(Object,'prototype')
	//上句返回 Object {value: Object, writable: false, enumerable: false, configurable: false}
	//不可写,不可枚举,不可配置
	var x=1;//申明一个全局变量
	delete this.x;//不能删除这个属性
	function(){
	var localVal=1;
	return delete localVal;
	}
	)(),返回false,局部变量不能被删除
	
	function f(){}  delete f;//返回false 函数不能被删除(不论全局还是局部)
	
	隐式创建的全局变量可以delete(不推荐)
	
	eval中通过var 定义的变量可以被删除掉。
	delete表达式删除成功或者没有任何副作用时候它返回true.

当对象是数组的时候delete 成功了,但是数组对应的位置变为undefined,数组的长度不变。

f=[1,2,3]
delete f[1] //返回true
f 变为[1, undefined × 1, 3],f.length依然为3