与+和concat串联的数组不同
Is array concatenation with + and concat different
在这个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
方法。
使用哪一个取决于用例。
- 要获得字符串的结果,可以使用
+
运算符 - 要获得数组的结果,请使用
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;
加号运算符用于解决两个目的:
- 添加数字
- 连接字符串
但它并没有定义为应用于数组。来自ECMA部分
11.6.1加法运算符(+)
加法运算符执行字符串串联或数字加法。生产
AdditiveExpression : AdditiveExpression + MultiplicativeExpression
的评估如下:
- 设CCD_ 13是对CCD_
- 设CCD_ 15为CCD_
- 设CCD_ 17是对CCD_
- 设CCD_ 19为CCD_
- 设CCD_ 21为CCD_
- 设CCD_ 23为CCD_
- 如果
Type(lprim)
是String
或者Type(rprim)
是String
,那么
- 返回字符串,该字符串是连接
ToString(lprim)
和ToString(rprim)
的结果- 返回对
ToNumber(lprim)
和ToNumber(rprim)
应用加法运算的结果。请参见下面11.6.3的注释
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Typescript rxjs可观测数组concat
- 为什么将元素推送到 concat( ) 返回的新数组中会返回数组的大小而不是数组本身
- 为什么 concat 函数返回一个带有窗口的数组
- Angular.js:如何使用ng-bind来显示concat.数组的元素作为字符串
- 为什么不't concat方法会影响数组的长度属性
- 与+和concat串联的数组不同
- Javascript数组复制,concat和slice,哪个更好
- 在async.contat()之后的Node.js concat数组
- 可以't使用concat添加字符串数组
- 函数参数数组,如何影响reference =[]或reference.concat(array2)
- Javascript, array concat将Windows Object添加到结果数组中,但它不适用于Firefo
- 对不存在的数组索引使用concat
- 为什么会有's concat结果中数组的总索引号