javascript - 删除未定义的数组元素和删除有什么区别?

标签 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

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

当删除运算符删除数组元素时,该元素不再存在于数组中。在以下示例中,trees[3] 已通过 delete 删除。

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

如果您希望数组元素存在但具有未定义的值,请使用未定义的值而不是删除运算符。在下面的示例中,trees[3] 被赋值为 undefined,但数组元素仍然存在:

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

最佳答案

考虑一下:

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]

如果你想在数组中间删除你应该使用拼接:

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

关于javascript - 删除未定义的数组元素和删除有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37675350/

相关文章:

javascript - 从功能组件发送功能 Prop 时防止重新渲染

javascript - 一页上具有相同结构的多个模态框

javascript - OO JS继承和原型(prototype)

javascript - 每次单击链接时都会执行 .js 文件

javascript - 未捕获的类型错误 : Cannot read property 'replace' of undefined jQuery draggable + sortable

javascript - 使用 react 路由器选择新项目时刷新组件

javascript - 如何使用node.js在server.js中传递参数

javascript - 从 Angular2 模板通过引用传递变量

javascript - 在我添加数据转换之前,Knockout JS 与 Ratchet 和 push.js 配合得很好

javascript - 使用 CSS block 显示/隐藏文本