正在编写一个接受数字数组的函数,如果缺少数字,则返回true和索引;如果没有数字,则返回false。 我只是注意到关于数组的某些东西使我感到困惑。
类似于
的数组[,1,2,3,4]
将打印
[undefined,1,2,3,4]
数组以逗号开头,输出对我来说很有意义
但是为什么
[1,2,3,4,] // Notice that the array ends with a comma
打印
[1,2,3,4]
我应该假设输出为[1,2,3,4,undefined]
。
有人知道为什么会这样吗?
答案 0 :(得分:7)
尾部逗号(“省略号”)将被忽略:
如果在数组末尾省略了一个元素,则该元素对数组的长度没有贡献。
http://www.ecma-international.org/ecma-262/7.0/#sec-array-initializer
请注意,右侧仅加了一个逗号,因此此[1,2,,]
将呈现为[1,2,undefined]
。
在Javascript中,数组只是具有特殊length
属性的对象,以及类似
['a', 'b', 'c']
是
的快捷方式{
"0": 'a',
"1": 'b',
"2": 'c',
"length": 3
}
省略使初始化程序跳过下一个索引并增加整体length
,因此
['a', 'b', , 'c']
成为这个:
{
"0": 'a',
"1": 'b',
"3": 'c'
"length": 4
}
和两个尾随空格
['a', 'b', 'c', , ]
成为
{
"0": 'a',
"1": 'b',
"2": 'c',
"length": 4
}
答案 1 :(得分:1)
[,1,2,3,4]
不会创建[undefined,1,2,3,4]
。它创建[empty, 1, 2, 3, 4]
。这是一个稀疏的数组,开头有一个 hole 。
从documentation到Trailing commas:
JavaScript会忽略数组中的尾部逗号。从一开始,JavaScript就允许在数组文字中使用尾随逗号,后来又将它们添加到对象文字(ECMAScript 5)中,最近(ECMAScript 2017)添加到函数参数中。
但是,如果使用了多个逗号,则会产生一个孔:
var arr = [1, 2, 3,,,];
console.log(arr.length) // 5
答案 2 :(得分:0)
该数组实际上是[empty,1,2,3,4]
,这里的empty
基本上是一个内存孔。这是一个已丢失其内存引用的条目。详细说明的链接在这里