他们是一成不变的。您不能使用诸如此类来更改字符串中的字符
var myString = "abbdef"; myString[2] ='c'。该字符串操作方法,例如
trim,
slice返回新的字符串。
同样,如果您对同一个字符串有两个引用,则修改一个不会影响另一个
let a = b = "hello";a = a + " world";// b is not affected
但是,我总是听到Ash在他的回答中提到的内容(使用Array.join进行连接的速度更快),因此我想测试一下连接字符串并将最快的方法抽象为StringBuilder的不同方法。我写了一些测试来看看这是否正确(不是!)。
我一直认为这是最快的方法,尽管我一直认为添加方法调用可能会使它变慢。
function StringBuilder() { this._array = []; this._index = 0;}StringBuilder.prototype.append = function (str) { this._array[this._index] = str; this._index++;}StringBuilder.prototype.toString = function () { return this._array.join('');}这是性能速度测试。他们三个都创建了一个巨大的字符串,该字符串由将
"Hellodiggitydog"十万次连接成一个空字符串组成。
我创建了三种类型的测试
- 使用
Array.push
和Array.join
- 使用数组索引避免
Array.push
,然后使用Array.join
- 直串连接
然后,我通过将它们抽象为
StringBuilderConcat,
StringBuilderArrayPush和
StringBuilderArrayIndex
来创建了这三个测试,请去那里运行测试,以便获得一个不错的示例。请注意,我修复了一个小错误,因此擦除了测试数据,一旦有足够的性能数据,我将更新表。以获取旧数据表。
如果您不想点击链接,请查看以下数字(Ma5rch 2018中的最新更新)。每次测试的数量以1000次操作/秒为单位( 越高越好 )
| Browser | Index | Push | Concat | SBIndex | SBPush | SBConcat |---------------------------------------------------------------------------| Chrome 71.0.3578 | 988 | 1006 | 2902 | 963 | 1008 | 2902 || Firefox 65 | 1979 | 1902 | 2197 | 1917 | 1873 | 1953 || Edge | 593 | 373 | 952 | 361 | 415 | 444 || Exploder 11 | 655 | 532 | 761 | 537 | 567 | 387 || Opera 58.0.3135 | 1135 | 1200 | 4357 | 1137 | 1188 | 4294 |
发现
如今,所有常绿的浏览器都能很好地处理字符串连接。
Array.join
仅帮助IE 11总体而言,Opera最快,是Array.join的4倍
Firefox仅次于
Array.join
FF,但速度稍慢,但在Chrome中则慢得多(3倍)。Chrome排名第三,但字符串concat的速度比Array.join快3倍
创建一个StringBuilder似乎不会对性能产生太大影响。
希望其他人觉得这有用



