为什么 JavaScript 中未定义元素数组上的`join()` 返回的元素少 1 个?

han*_*rse 0 javascript

我最初是在查找Array.prototype.toString(). 从规范中我意识到这个调用.join()。但我不明白带有未定义元素的数组的输出。

[,,,].toString()返回",,"。但我预料到了",,,"。序列化中似乎缺少 1 个元素。这里发生了什么事?

Yon*_*uan 5

因为在 JavaScript 中,如果最后一个,尾随逗号)后面没有任何内容,则会被忽略。

console.log([1,].length);
// -> 1

console.log([1,,].length);
// -> 2
Run Code Online (Sandbox Code Playgroud)

因此,当您执行 时[,,,],最后一个,被忽略。因此长度仅为3.

console.log([,,,].length);
// -> 3
Run Code Online (Sandbox Code Playgroud)

当你加入一个带有n项目的数组时,你会得到n-1逗号。因此,你得到的结果。