我知道你可以在 Javascript 中连接这样的字符串:
str1 + str2;
或者像这样:
[str1, str2].join('');
为什么也有这样做的功能?
str1.concat(str2)
是不是更快了?对我来说,这似乎更像是打字。我的猜测是,这是在str1 + str2
优化之前使用的。那会是正确的吗?
我知道你可以在 Javascript 中连接这样的字符串:
str1 + str2;
或者像这样:
[str1, str2].join('');
为什么也有这样做的功能?
str1.concat(str2)
是不是更快了?对我来说,这似乎更像是打字。我的猜测是,这是在str1 + str2
优化之前使用的。那会是正确的吗?
该String.prototype.concat
方法非常通用(ECMA 标准 5.1 版/2011 年 6 月,pp.143-144):
- 调用 CheckObjectCoercible 并传递this值作为其参数。
- 让S成为调用ToString的结果,并将this值作为参数。
- 让args是一个内部列表,它是传递给此函数的参数列表的副本。
- 令R为S。
重复,而args不为空
一个。从args中删除第一个元素,并让next成为该元素的值。
湾。令R为由R的前一个值中的字符后跟 ToString( next ) 的字符组成的 String 值。
- 返回R。
因为它非常通用,所以几乎可以在每个具有ToString()
方法的对象上使用。另请参阅以下注释:
注意: concat 函数是故意通用的;它不要求它的this值是一个 String 对象。因此,它可以转移到其他类型的对象中用作方法。
所以你可以使用String.prototype.concat.call(myObject,....);
. 请注意,还有一种Array.prototype.concat
方法也非常通用(第 125 页)。
似乎存在显着的性能差异,尤其是对于 IE:
http://www.sitepen.com/blog/2008/05/09/string-performance-an-analysis/
它不会比运算符重载更快或更慢。