先看一段代码
var a = ['a', 'b']; console.log(a); //["a", "b"] delete(a[0]); console.log(a); //[undefined,"b"] var o = {a:'a', b:'b'}; console.log(o); //Object { a="a", b="b"} delete(o.a); console.log(o); //Object { b="b"}
由此可见:
delete运算符把一个数组元素设置为undefined值,但元素本身还继续存在。要真正删除一个元素,以使下标位置高于它的所有元素都向下迁移到较低的下标位置,那么必须使用一个数组方法。Array.shift()方法删除掉数组的第一个元素,Array.pop()方法删除掉最后一个元素,Array.splice()从一个数组删除一个连续范围内的元素。
而当delete运算符作用于对象时,删除属性不仅仅是把属性设置为undefined,而是从对象移除了属性。在删除之后,for/in将不会枚举该属性,并且in运算符也不会检测到该属性。