javascript – 为什么删除保留Array元素?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么删除保留Array元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
今天我在Stack Overflow – How do I remove objects from a javascript associative array?上偶然发现了一个问题.令我感到惊讶的是,接受的答案是误导性的,并且被高举了,所以我强调了可能的陷阱.

然而,在拼凑一个纠正答案的同时,我意识到我不知道为什么删除这样做是有意义的,以保持元素未定义而不是删除.

var elements = new Array()
elements.push(NaN)
elements.push(NaN)
elements.push(NaN)
delete elements[1]
console.log("number of elements: ",elements.length)   // returns 3

是否有理由背后呢?

解决方法

I realized I have no idea as to why it makes sense for delete to assign undefined instead of removal.

没有delete从对象中删除属性,它不会将它们设置为undefined.这是一个简单的方法来说明:

var a = ['a','b','c'];
console.log(1 in a); // logs "true"
delete a[1];
console.log(1 in a); // logs "false"

请注意,删除后,a没有名为1的属性.在所有

对比度:

var a = ['a','c'];
console.log(1 in a); // logs "true"
a[1] = undefined;
console.log(1 in a); // logs "true"

在这里,还有一个名为1的属性,只是该属性的值未定义.

有理由在JavaScript,arrays aren’t really arrays at all中.它们只是对象,数组“索引”只是属性名称(这是字符串 – 是的,我们只是倾向于将它们写为数字),数组具有特殊的属性名称处理这些都是数字(索引),一个特殊的长度属性,以及它们从Array.prototype得到的一些函数.这在Section 15.4规格中非常明确.一旦你把它牢固地放在你的头脑中,JavaScript数组并不是真正的数组,它们就更有意义了.

猜你在找的JavaScript相关文章