JS 数组解构 - 它是如何给出这个输出的?

JS Array Destructing - How is it giving this output?

代码输出:

const arr = [1, 2, 3, 4, 5];
console.log([...arr + []]);

给予

​​​​​[ '1', ',', '2', ',', '3', ',', '4', ',', '5' ]​​​​​

我知道 ...arr 会 return 数组项(如 1 2 3 4 5)并且 number + [] 给出字符串,但我真的很困惑为什么 , 是已添加到输出数组。

是否因为console.log()中的...arr 结果是 [..."1, 2, 3, 4, 5" + []] 其中输出相同?

还是我不知道的神奇解释?

Here 是对应用于数组的 + 运算符的解释。那么会发生什么:

  1. arr + [] 给你一个字符串 "1,2,3,4,5"
  2. 然后该字符串 spreaded/splitted(使用扩展语法)变成该字符串的字符数组。

当你这样做时添加 Nurbol 的答案

const arr = [1, 2, 3, 4, 5];
console.log([...arr + []]);

它将变成一个字符串,数组中的每个元素都将其转换为一个字符串。由于逗号也在这里,所以它将成为字符串数组的一个元素。

当你这样做的时候

const arr = [1, 2, 3, 4, 5];
console.log((arr + []).split())

它创建该数组的单个字符串,然后您创建一个指定分割点的字符串数组。

array.toString() 在每个元素后添加 ,

const a = [1, 2, 3, 4, 5]
console.log(a.toString())
// -> '1,2,3,4,5'
console.log([...a.toString()])
// -> [ '1', ',', '2', ',', '3', ',', '4', ',', '5' ]

[...aray + []] 将数组转换为字符串,然后添加空字符串,然后使用 [...resultString] 构建结果