微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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数组并不是真正的数组,它们就更有意义了.

原文地址:https://www.jb51.cc/js/153483.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐