js 避免使用 delete

JavaScript029

js 避免使用 delete,第1张

如下图:

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

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

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

首先,<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