2

我知道你可以在 Javascript 中连接这样的字符串:

str1 + str2;

或者像这样:

[str1, str2].join('');

为什么也有这样做的功能?

str1.concat(str2)

是不是更快了?对我来说,这似乎更像是打字。我的猜测是,这是在str1 + str2优化之前使用的。那会是正确的吗?

4

4 回答 4

4

是不是更快了?

相反,它似乎可以明显变慢。

http://jsperf.com/concat-operator-vs-concat

于 2012-04-20T17:57:59.040 回答
2

String.prototype.concat方法非常通用(ECMA 标准 5.1 版/2011 年 6 月,pp.143-144):

  1. 调用 CheckObjectCoercible 并传递this值作为其参数。
  2. S成为调用ToString的结果,并将this值作为参数。
  3. args是一个内部列表,它是传递给此函数的参数列表的副本。
  4. RS
  5. 重复,而args不为空

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

    湾。令R为由R的前一个值中的字符后跟 ToString( next ) 的字符组成的 String 值。

  6. 返回R

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

注意: concat 函数是故意通用的;它不要求它的this值是一个 String 对象。因此,它可以转移到其他类型的对象中用作方法。

所以你可以使用String.prototype.concat.call(myObject,....);. 请注意,还有一种Array.prototype.concat方法也非常通用(第 125 页)。

于 2012-04-20T18:11:15.313 回答
2

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

http://www.sitepen.com/blog/2008/05/09/string-performance-an-analysis/

于 2012-04-20T17:55:11.390 回答
-1

它不会比运算符重载更快或更慢。

于 2012-04-20T17:54:07.810 回答