【发布时间】:2020-06-21 15:10:46
【问题描述】:
我正在阅读在页面底部附近谈到的delete 一元运算符 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Unary)
它说从数组中删除一个项目将使项目undefined。但是,正如下面的代码所示,我们不能像使用具有显式值 undefined 作为其项之一的新数组那样循环此 undefined 项。
这只是一个怪癖还是这里有更多内容需要阅读?将删除的项目描述为undefined 似乎没有意义,因为它不像undefined 那样对待。
let a = [1, 2, 3];
console.log("untampered-with array:", a);
delete a[0];
console.log("array after first item deleted:", a);
a.forEach(element => {
console.log("looping over each item and printing it:", element);
});
b = [undefined, 1, 2];
b.forEach(element => {
console.log("looping over each item of array with undefined explicitly declared:", element);
});
还可能值得一提的是,在 Visual Studio Code 中,当我们在删除第一项后打印出 a 时,它不会将第一项显示为未定义(就像在 Stack Overflow 代码模拟器上一样)。它显示了这一点:
【问题讨论】:
-
这里有问题吗?
-
它在数组中创建了一个hole。
forEach和其他数组方法跳过漏洞:stackoverflow.com/a/13847793/3082296 -
"
trees[3]被删除删除。但是,trees[3]仍然是可寻址的并返回未定义" - 这不是很好地表达。 任何属性在javascript中无论是否存在都是可寻址的,不存在时返回undefined,这里数组没什么特别的。 -
Do not use
deleteon arrays。绝不。我将更新 MDN 以包含警告。
标签: javascript