阵列串联与+和concat不同

时间:2015-12-28 08:32:41

标签: javascript html arrays html5 concatenation

  

this fiddle中,当使用+运算符时,会跳过分隔符,,而concat方法不会跳过,

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

3 个答案:

答案 0 :(得分:9)

考虑一下:

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

在数组上使用plus concatenation运算符将使数组经历以下步骤:

[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"

答案 1 :(得分:3)

在数组上使用+字符串连接)运算符时,通过在Array原型上调用toString方法将数组隐式地类型化为字符串。

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

使用哪一个取决于用例。

  1. 要将结果设为字符串,您可以使用+运算符
  2. 要获得数组的结果,请使用concat
  3. 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;

答案 2 :(得分:2)

定义了加号运算符以解决两个目的:

  1. 添加数字。
  2. 加入字符串。
  3. 但它没有定义为应用于数组。来自this

      

    11.6.1加法运算符(+)

         

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

         
        
    1. lref成为评估AdditiveExpression
    2. 的结果   
    3. lval成为GetValue(lref)
    4.   
    5. rref成为评估MultiplicativeExpression
    6. 的结果   
    7. rval成为GetValue(rref)
    8.   
    9. lprim成为ToPrimitive(lval)
    10.   
    11. rprim成为ToPrimitive(rval)
    12.   
    13. 如果Type(lprim)StringType(rprim)String,那么      
          
      1. 返回串联ToString(lprim)后跟ToString(rprim)
      2. 的字符串   
    14.   
    15. 将添加操作的结果返回到ToNumber(lprim)ToNumber(rprim)。参见下面的注释11.6.3。
    16.