变量 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