今天我在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"
对比度:
var a = ['a','c']; console.log(1 in a); // logs "true" a[1] = undefined; console.log(1 in a); // logs "true"
有理由在JavaScript,arrays aren’t really arrays at all中.它们只是对象,数组“索引”只是属性名称(这是字符串 – 是的,我们只是倾向于将它们写为数字),数组具有特殊的属性名称处理这些都是数字(索引),一个特殊的长度属性,以及它们从Array.prototype得到的一些函数.这在Section 15.4规格中非常明确.一旦你把它牢固地放在你的头脑中,JavaScript数组并不是真正的数组,它们就更有意义了.