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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...