栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript字符串是不可变的吗?我需要JavaScript中的“字符串生成器”吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript字符串是不可变的吗?我需要JavaScript中的“字符串生成器”吗?

他们是一成不变的。您不能使用诸如此类来更改字符串中的字符

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似乎不会对性能产生太大影响。

希望其他人觉得这有用



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号