gpt4 book ai didi

javascript - 为什么带有逗号但没有元素的数组文字长度不为 0?

转载 作者:行者123 更新时间:2023-12-03 13:40:59 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is the difference between [undefined] and [,]? [duplicate]

(4 个回答)


6年前关闭。




我只是在摆弄一些 JS,发现了一些我认为不会发生的事情。

var arr = [,];
arr.length // 1
arr[0] // undefined

此外, [,,]长度为 2。这些数组的长度不应该为 0 吗?我认为逗号仅用于分隔数组中的元素,那么为什么逗号似乎被视为这些特定数组中的元素?数组的这种行为是否有任何应用?

最佳答案

在数组文字中,末尾的逗号被忽略,但所有其他逗号分隔元素。如果省略元素的值,则默认为 undefined ,但元素仍然存在。所以

[,]

相当于
[undefined,]

这相当于
[undefined]

这有 1 个元素,其值为 undefined .

相似地
[,,] = [undefined, undefined, ] = [undefined, undefined]

它有2个元素。

当您想省略数组中间的元素时,默认元素行为更有用。
[1, 2, 3, , , 6, 7, 8]

实际上,创建未定义元素的两种方法之间存在细微差别。在 Javascript 中,数组实际上是一个具有 length 的对象。属性和名称是数组元素索引的属性。通常,如果一个数组有 length = N ,索引属性将是 0 中的所有整数至 N-1 .但是,当您在数组文字中省略一个元素时,不会为该索引创建任何属性。

在大多数情况下,这个缺失的属性并不重要,因为访问对象的不存在的属性会返回 undefined。 , 就好像你有一个值为 undefined 的属性.您只能使用像 hasOwnProperty 这样的方法来检测这些缺失的属性。或调用 Object.keys . Javascript 控制台使用类似的东西来显示数组中的间隙,这与显式 undefined 不同。元素。

所以
Object.getOwnPropertyNames([1, 2, 3]) => ["0", "1", "2", "length"]
Object.getOwnPropertyNames([1, , 3, 4]) => ["0", "2", "3", "length"]
Object.getOwnPropertyNames([, , , , ]) => ["length"]

忽略最后一个逗号的原因是你可以这样写:
[ 
"foo",
"bar",
"baz",
"quux",
]

这使编辑更容易,因为您可以插入和删除行,而不必对最后一个元素进行特殊处理。

关于javascript - 为什么带有逗号但没有元素的数组文字长度不为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com