删除未定义和删除数组元素之间的区别是什么?

时间:2016-06-07 09:21:54

标签: javascript

MDN定义了以下差异,但我不了解其中的区别。一世 创建了一个数组然后删除了一个元素,然后尝试调用该元素并返回undefined。

var ary=[0,1,2,3,4];
delete ary[3];
ary[3]// returns undefined
ary.length //returns 5

var ary2=[0,1,2,3,4];
ary2[2]=undefined
ary2[2]// returns undefined
ary2.length// returns 5

删除数组元素时,数组长度不受影响。即使您删除了数组的最后一个元素,这也成立。

当delete运算符删除数组元素时,该元素不再在数组中。在以下示例中,将使用delete删除树[3]。

var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];
if (3 in trees) {
// this does not get executed
}

如果要存在数组元素但具有未定义的值,请使用未定义的值而不是delete运算符。在以下示例中,树[3]被赋值undefined,但数组元素仍然存在:

var trees = ["redwood","bay","cedar","oak","maple"];
trees[3] = undefined;
if (3 in trees) {
// this gets executed
}

2 个答案:

答案 0 :(得分:2)

考虑一下:

var a = [1, 2, 3];
a[1] = undefined;
console.log('1' in a); // true
delete a[1];
console.log('1' in a); // false
console.log(a.length); // 3
console.log(a); // [1, undefined, 3]

如果要在数组中间删除,则应使用splice:

var a = [1, 2, 3];
a.splice(1, 1);
console.log(a.length); // 2
console.log(a); // [1, 3]

拼接的论据是:

array.splice(start, deleteCount[, item1[, item2[, ...]]])

See more over at MDN

答案 1 :(得分:1)

由于数组只是对象..删除删除了' 3'来自对象的键而不改变任何其他内容。但是,将第3个元素设置为undefined并不会删除键3,但会将其值设置为undefined。