为了账号安全,请及时绑定邮箱和手机立即绑定

为什么[1,2]+[3,4]=“1,23,4”在JavaScript中?

/ 猿问

为什么[1,2]+[3,4]=“1,23,4”在JavaScript中?

HUWWW 2019-07-22 15:39:44

为什么[1,2]+[3,4]=“1,23,4”在JavaScript中?

我想将数组的元素添加到另一个数组中,因此我尝试了以下方法:

[1,2] + [3,4]

它的答复是:

"1,23,4"

怎么一回事?


查看完整描述

3 回答

?
胡说叔叔

这个+操作者未为数组定义.

结果是Javascript将数组转换为字符串把它们连在一起。

 

更新

因为这个问题和我的答案得到了很多关注,所以我觉得有一个问题是有用的,也是有意义的。概述关于+运算符一般也是如此。

就这样吧。

不包括E4X和特定于实现的内容,Javascript(截至ES5)6内建数据类型:

  1. 未定
  2. 布尔型
  3. 对象

注意,尽管typeof 有点令人困惑的返回 object对于Null和function对于可调用对象,Null实际上不是一个对象,严格地说,在符合规范的Javascript实现中,所有函数都被认为是对象。

没错-Javascript无基元数组就是这样;只有调用的对象的实例Array用一些语法糖来减轻疼痛。

增加更多混乱,包装器实体,如new Number(5)new Boolean(true)new String("abc")都是object键入,而不是数字,布尔或字符串,如人们所期望的。但是对于算术运算符NumberBoolean表现得像数字一样。

别紧张,是吧?有了这一切,我们就可以继续进行概述了。

不同的结果类型+按操作数类型

           || undefined | null   | boolean | number | string | object |

=========================================================================

 undefined  || number    | number | number  | number | string | string | 

 null       || number    | number | number  | number | string | string | 

 boolean    || number    | number | number  | number | string | string | 

 number     || number    | number | number  | number | string | string | 

 string     || string    | string | string  | string | string | string | 

 object     || string    | string | string  | string | string | string | 

*适用于Chrome 13、FF6、Opera 11和IE9。检查其他浏览器和版本是留给读者的练习。

注:正如CMS,对于某些对象的情况,如NumberBoolean还有定制的+运算符不一定会产生字符串结果。它可以根据对象到原语转换的实现而变化。例如var o = { valueOf:function () { return 4; } };评量o + 2;6..number,评估o + '2''42'..string.

要查看概览表是如何生成的,请访问http://jsfiddle.net/1obxuc7m/


查看完整回答
反对 回复 2019-07-22
?
翻阅古今

JavaScript的+运算符有两个用途:添加两个数字或连接两个字符串。它对数组没有特定的行为,所以它将它们转换为字符串,然后加入它们。

如果要连接两个数组以生成一个新数组,请使用这个.concat方法相反:

[1, 2].concat([3, 4]) // [1, 2, 3, 4]

如果要有效地将所有元素从一个数组添加到另一个数组,则需要使用.Push方法:

var data = [1, 2];// ES6+:data.push(...[3, 4]);// or legacy:Array.prototype.push.apply(data, [3, 4]);// data is now [1, 2, 3, 4]

的行为+运算符定义为ECMA-262 5E第11.6.1节:

11.6.1加法运算符(+)

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

  1. 放任

    lref

    是评价的结果

    AdditiveExpression.

  2. 放任

    lval

    GetValue(lref).

  3. 放任

    rref

    是评价的结果

    MultiplicativeExpression.

  4. 放任

    rval

    GetValue(rref).

  5. 放任

    lprim

    ToPrimitive(lval).

  6. 放任

    rprim

    ToPrimitive(rval).

  7. 如果

    Type(lprim)

    String

    Type(rprim)

    String

    ,然后
    1. 返回连接的结果字符串。

      ToString(lprim)

      紧随其后

      ToString(rprim)

  8. 返回将加法操作应用到

    ToNumber(lprim)

    ToNumber(rprim)

    ..见下面的说明11.6.3。

您可以看到每个操作数都被转换。ToPrimitive..通过进一步的阅读,我们可以发现ToPrimitive将始终将数组转换为字符串,从而产生此结果。


查看完整回答
反对 回复 2019-07-22
?
慕盖茨4086497

这个+串接字符串,因此它将数组转换为字符串。

[1,2] + [3,4]'1,2' + '3,4'1,23,4

若要组合数组,请使用concat.

[1,2].concat([3,4])[1,2,3,4]


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信