删除数组索引的原型也删除数组索引

vipin8169

此处的本教程指出

“如果使用delete运算符删除属性,则in运算符将对该属性返回false。”

下面是他们为此说明的示例之一:

var trees = new Array('redwood', 'bay', 'cedar', 'oak', 'maple');
delete trees[3];
3 in trees; // returns false

但是,我的问题是,在删除trees [3]之前,Object.getOwnPropertyNames(trees)返回["0", "1", "2", "3", "4", "length"],但是在删除后返回["0", "1", "2", "4", "length"]为什么会这样呢?我知道,如果删除一个属性,则该属性将不存在,但在这种情况下,属性也是数组的索引。对这种奇怪的行为有什么好的解释吗?

nem035

您不是要删除原型。您正在删除对象实例的属性。

由于JS中的数组只是对象,因此过程相同:

const array = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
  length: 3
}

delete array[2]
console.log(Object.getOwnPropertyNames(array))

不同的是,删除数组元素时,数组长度不受影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章