与+和concat串联的数组不同

Is array concatenation with + and concat different

本文关键字:数组 concat      更新时间:2023-09-26

在这个fiddle中,当使用+运算符时,会跳过delimeter ,,而concat方法不会跳过,

在javascript中,通常+运算符和concat方法的串联是相同的。它不也适用于数组吗?

考虑一下:

[1, 2, 3] + [4, 5, 6] // "1,2,34,5,6"
[1, 2, 3].concat([4, 5, 6]) // [1, 2, 3, 4, 5, 6]

在数组上使用加号串联运算符将使数组经历以下步骤:

[1, 2, 3] + [4, 5, 6]
[1, 2, 3].toString() + [4, 5, 6].toString()
"1,2,3" + "4,5,6"
"1,2,34,5,6"

在数组上使用+String concatenation)运算符时,通过在array原型上调用toString方法,将数组隐式类型转换为字符串。

要连接两个数组,请使用Array#concat方法。

使用哪一个取决于用例。

  1. 要获得字符串的结果,可以使用+运算符
  2. 要获得数组的结果,请使用concat

function testing() {
    var alpha = ["a", "b", "c"];
    var numeric = [1, 2, 3];
    var usingPlus = alpha + numeric;
    console.log(typeof usingPlus);
    var usingConcat = alpha.concat(numeric);
    console.log(typeof usingConcat);
};
window.onload = testing;

加号运算符用于解决两个目的:

  1. 添加数字
  2. 连接字符串

但它并没有定义为应用于数组。来自ECMA部分

11.6.1加法运算符(+)

加法运算符执行字符串串联或数字加法。生产AdditiveExpression : AdditiveExpression + MultiplicativeExpression的评估如下:

  1. 设CCD_ 13是对CCD_
  2. 设CCD_ 15为CCD_
  3. 设CCD_ 17是对CCD_
  4. 设CCD_ 19为CCD_
  5. 设CCD_ 21为CCD_
  6. 设CCD_ 23为CCD_
  7. 如果Type(lprim)String或者Type(rprim)String,那么
    1. 返回字符串,该字符串是连接ToString(lprim)ToString(rprim)的结果
  8. 返回对ToNumber(lprim)ToNumber(rprim)应用加法运算的结果。请参见下面11.6.3的注释