关于js中的delete

JavaScript010

关于js中的delete,第1张

首先,<code>delete</code>删除成功返回<code>true</code>,失败返回<code>false</code>。

仔细一看便知,这里的<code>this</code>指向的是<code>function wxCount()</code>,而在javascript中,<code>delete</code>是无法删除一般的变量或者<code>function</code>的,永远都会返回<code>false</code>。

大多数情况下可以理解为:通过变量或者函数声明的属性不能删除。

<code>x</code>可以理解为全局对象<code>GLOBAL</code>的一个属性,即<code>GLOBAL.x</code>,可以删除成功。函数中的<code>obj</code>也被置为全局属性,同理。

删除数组中元素,数组长度不会发生变化,但是元素实际不存在数组中了。

如果将最后个元素置为undefined,实际还是存在数组中。

关于delete更深的问题和兼容性问题,可以参考

深入理解JS的delete

delete和splice都可以删除数组中的元素,但是有些区别的,我举具体的例子给你看,你看后就明白了。

例如有一个数组是 :var textArr = ['a','b','c','d']

这时我想删除这个数组中的b元素:

方法一:delete 删除数组

delete textArr[1] 结果为: [ "a",undefined,"c","d"]

只是被删除的元素变成了 undefined 其他的元素的键值还是不变。

方法二:aplice 删除数组

splice(index,len,[item])注释:该方法会改变原始数组。

index:数组开始下标len: 替换/删除的长度 item:替换的值,删除操作的话 item为空

textArr.splice(1,1) 结果为: [ "a","c","d"] 直接删除了数组 改变了数组的值。

如下图:

变量 b 的原型指向 a ,同时存在同样的键时,使用 delete 删除 b 的这个键(对象和数组同理),再次获取 b 这个键时,会遍历原型链取找这个键,所以就有了新的值而不是 undefined ;

为避免这样导致的错误,可以使用 hasOwnProperty 判断有没有这个键,而不去原型链遍历;

delete 后对象还是会保留键,只是值变成 undefined 了,数组也一样,所以数组 delete 之后如果使用类似 array[array.lenght - 1] 来取值的话,会产生误差,因为 delete 的那个键还在;