Javascript中String.concat()的用途是什么?

Javascript中String.concat()的用途是什么?,javascript,string,concatenation,Javascript,String,Concatenation,我知道可以在Javascript中连接如下字符串: str1 + str2; 或者像这样: [str1, str2].join(''); 为什么也有这样一个函数呢 str1.concat(str2) 快一点吗?对我来说,似乎更多的是打字。我猜这是在优化str1+str2之前使用的。这是正确的吗?它不会比操作员过载更快或更慢 似乎存在显著的性能差异,尤其是对于IE: 快一点吗 相反,它似乎可以大大减慢 String.prototype.concat方法非常通用(,pp.143-144):

我知道可以在Javascript中连接如下字符串:

str1 + str2;
或者像这样:

[str1, str2].join('');
为什么也有这样一个函数呢

str1.concat(str2)

快一点吗?对我来说,似乎更多的是打字。我猜这是在优化
str1+str2
之前使用的。这是正确的吗?

它不会比操作员过载更快或更慢

似乎存在显著的性能差异,尤其是对于IE:

快一点吗

相反,它似乎可以大大减慢


String.prototype.concat方法非常通用(,pp.143-144):

  • 调用checkObjectImpressible,将此值作为其参数传递
  • 让我们作为调用ToString的结果,将this值作为其参数
  • 设args是一个内部列表,它是传递给此函数的参数列表的副本
  • 设R为S
  • 在args不为空时重复

    a。从args中删除第一个元素,让next为该元素的值

    b。设R为字符串值,由R的前一个值中的字符后跟 ToString的字符(下一个)

  • 返回R
  • 因为它非常通用,所以几乎可以在具有
    ToString()
    方法的每个对象上使用它。另见以下注释:

    注意: concat函数故意是泛型的;它不要求其此值是字符串对象。因此,它可以被转移到其他类型的对象中用作方法


    因此可以使用
    String.prototype.concat.call(myObject,…)。请注意,还有一个
    Array.prototype.concat
    方法,它也是非常通用的(第125页)。

    您可以将它作为参数传递给函数,这是您无法使用
    +
    :-)@Cameron:这是错误的。你在传递一根绳子。我的意思是,你不能传递
    +
    操作符,但是函数是一级对象。哦,我明白你的意思了。正确的。酷。=)说得好,说得好。。。这篇文章讨论了字符串上的运算符是如何在所有浏览器中都得到优化的,我敢肯定,从那时起,它才得到了改进。+1是一个非常有用的答案。这实际上解决了为什么会有String.concat()方法,而不是它是更快还是更慢。它应该更慢,因为它总是调用
    ToString()
    并复制参数列表,而
    +
    只连接字符串而不产生此开销。
    +
    也可以应用于对象,并且执行完全相同的操作(
    toString
    和concatenation)。虽然这是真的,
    +
    将连接字符串,但没有说明如何进行连接。加法运算符仅定义为“返回由ToString(lprim)后跟ToString(rprim)连接而成的字符串”。字符串是如何连接的是一个实现细节。问题是,“连接”对象的能力并不是
    String.concat
    存在的原因。我想真正的目的是让JavaScript看起来更像Java(它既有
    str+str
    又有
    str.concat
    )。