为什么数组+数组returns一个字符串?

Why array + array returns a string?

为什么对 2 个数组求和会连接字符串中的所有内容,连接第一个值和最后一个值:

  let array = [1, 2]

  let array2 = [3, 4]

  let array3 = array + array2

  console.log(array3) // 1,23,4

这就是 JavaScript 的工作原理。两者都是对象,Array 和 Array 之间没有为 + 定义的东西,所以它会默认转换为 String 并将它们连接起来(仍然作为 String)。

使用 Array.prototype.concat 方法来实现您的目标。

let array = [1, 2]

let array2 = [3, 4]

let array3 = array.concat(array2);

console.log(array3) // [1, 2, 3, 4]

或者,您可以使用扩展运算符:

let array = [1, 2]

let array2 = [3, 4]

let array3 = [...array, ...array2];

console.log(array3) // [1, 2, 3, 4]

Javascript 尝试变得聪明并弄清楚您要做什么。加号表示添加两个字符串,因此 Javascript 继续并首先为您将数组转换为字符串。多好,对吧?

你要做的是实现 concat 方法:

const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2)

因为 + 运算符根据给定操作数的类型而有所不同。

  • 如果两个操作数都是数字,则执行 sum
  • 如果其中一个操作数不是数字,则两个操作数都转换为字符串(使用 .toString)和 连接

在您的示例中,您可能会注意到:

array + array2 == array.toString() + array2.toString()

有关更多信息,您可以阅读 docs and the spec