在this fiddle中,当使用
+
运算符时,会跳过分隔符,
,而concat
方法不会跳过,
。
在javascript中,通常与+
运算符和concat
方法的串联是相同的。它也不适用于数组吗?
答案 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
方法。
使用哪一个取决于用例。
+
运算符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;
答案 2 :(得分:2)
定义了加号运算符以解决两个目的:
但它没有定义为应用于数组。来自this
11.6.1加法运算符(+)
加法运算符执行字符串连接或数字加法。生产
AdditiveExpression : AdditiveExpression + MultiplicativeExpression
的评估如下:
- 让
的结果lref
成为评估AdditiveExpression
。- 让
lval
成为GetValue(lref)
。- 让
的结果rref
成为评估MultiplicativeExpression
。- 让
rval
成为GetValue(rref)
。- 让
lprim
成为ToPrimitive(lval)
。- 让
rprim
成为ToPrimitive(rval)
。- 如果
Type(lprim)
是String
或Type(rprim)
是String
,那么
- 返回串联
的字符串ToString(lprim)
后跟ToString(rprim)
- 将添加操作的结果返回到
醇>ToNumber(lprim)
和ToNumber(rprim)
。参见下面的注释11.6.3。