首页 / 知识
JavaScript字符串是不可变的吗? 我需要JavaScript中的“字符串生成器”吗?
2023-04-14 15:41:00

Are JavaScript strings immutable? Do I need a “string builder” in JavaScript?JavaScript是否使用不可变或可变的字符串? 我需要一个"字符串生成器"吗?
他们是一成不变的。您不能使用 同样,如果您有两个引用相同的字符串,则修改一个不会影响另一个
但是,我总是听到Ash在他的回答中提到的内容(使用Array.join进行连接的速度更快),因此我想测试一下连接字符串并将最快的方法抽象为StringBuilder的不同方法。我写了一些测试,看这是否正确(不是!)。 我一直认为这是最快的方法,尽管我一直认为添加方法调用可能会使它变慢。
这是性能速度测试。他们三个都创建了一个巨大的字符串,该字符串由将 我创建了三种类型的测试
然后,我通过将它们抽象为 如果您不想点击链接,请查看以下数字(Ma5rch 2018中的最新更新)。每次测试的数量以1000次操作/秒为单位(越高越好)
发现
希望其他人觉得这有用 不同的测试用例 由于@RoyTinker认为我的测试存在缺陷,因此我创建了一个新案例,该案例无法通过连接相同的字符串来创建大字符串,因此每次迭代都使用不同的字符。字符串连接似乎仍然更快或更快。让我们运行这些测试。 我建议每个人都应该继续思考其他测试方法,并随时在下面的不同测试用例中添加新链接。 http://jsperf.com/string-concat-without-sringbuilder/7 来自犀牛的书:
性能提示:
如果必须连接较大的字符串,请将字符串部分放入数组中,并使用
JavaScript中没有 只是为了澄清像我这样的简单想法(来自MDN):
不可变意味着:
看起来我们正在对字符串'immutableString'进行突变,但事实并非如此。代替:
字符串类型的值是不可变的,但是使用String()构造函数创建的String对象是可变的,因为它是一个对象,您可以向其添加新属性。
同时,尽管可以添加新属性,但是不能更改已经存在的属性 Chrome控制台中的测试屏幕截图
结论, 字符串是不可变的-它们不能更改,我们只能制造新的字符串。 例:
这是一个较晚的帖子,但是我在答案中找不到很好的书名。 除了可靠的书,这是肯定的:
现在,引用Rhino书摘录的答案是关于字符串不变性的,但是说"字符串是通过引用而不是值分配的"是错误的。 (可能它们最初的意思是相反地使用)。 "参考/值"的误解在"专业JavaScript"的"原始和参考值"一章中得以阐明:
与对象相反:
关于您关于ASP.NET Ajax中的StringBuilder的问题(在您对Ash的回应的评论中),专家似乎对此表示不同意见。 克里斯汀·温兹(Christian Wenz)在他的《 Programming ASP.NET AJAX(O'Reilly)》一书中说:"这种方法对内存没有任何可测量的影响(实际上,该实现似乎比标准方法稍慢一点)"。 另一方面,盖洛(Gallo)等人在他们的书《 ASP.NET AJAX in Action(Manning)》中说:"当要连接的字符串数量较大时,字符串构建器将成为避免性能大幅下降的重要对象。" 我猜您需要进行自己的基准测试,并且浏览器之间的结果可能也会有所不同。但是,即使它不能提高性能,对于习惯使用C#或Java之类的StringBuilders进行编码的程序员来说,它仍然可能被认为"有用"。 JavaScript字符串确实是不可变的。 Javascript中的字符串是不可变的 |
最新内容
相关内容
添加字符串命令linux?
添加字符串命令linux?,情况,名称,文件,位置,名字,地方,连续,信息,命令,内容,Linux下怎么输入连字符?末尾加个\这个符号就能两行。部分命令也linux命令查找字符串?
linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文本,Linux中使用grep命令,查询多个字符串Linux grep命令用于查找文linux命令字符串匹配?
linux命令字符串匹配?,系统,工具,命令,字符串,灵活,状态,文件,文本,模式,管道,图文说明Linux下grep查找含有某字符串的方法在linux中grep命令python字符串截取?
python字符串截取?,代码,步长,位置,分析,字符串,字符,信息,灵活,数字,表示,在Python中,字符串是一种非常常见的数据类型,它可以用来表示文本、数python字符串处理函数大总结
python字符串处理函数大总结,位置,数字,异常,培训,字符串,空格,长度,两边,字母,函数,str=pythonStringfunction生成字符串变量str=pythonStripython字符串处理相关函数
python字符串处理相关函数,数字,培训,通用,字符串,字符,函数,字母,模块,标号,空格,python中字符串中字符大小写的变换:*S.lower()#小写*S.uppe在Python中使用带有列表和字符串文
在Python中使用带有列表和字符串文字的for循环,代码,数字,培训,之间,字符串,列表,语句,文字,奇数,这一点,现在看一下下面的代码,输出1到100之用Python的特性来切片无限生成器
用Python的特性来切片无限生成器,分析,培训,切片,生成器,注解,特性,对象,类型,整数,长期以来,注解推迟评估在Python3.7中,只要激活了正确的__fPython生成器
Python生成器,生成器,培训,对象,元素,特性,除此之外,函数,能力,有去无回,简而言之,1.什么是可迭代对象?可迭代对象,英文Iterable,是一个形容词,Python当中生成器和迭代器的使用
Python当中生成器和迭代器的使用,数据,老板,概念,员工,代码,收入,位置,生成器,工具,地方,我当初第一次学到迭代器和生成器的时候,并没有太在意python字符串的正则匹配:re模块
python字符串的正则匹配:re模块,时间,官网,数据,网络,培训,模块,字符串,函数,正则,日期,正则表达式在匹配负责字符串的时候,确实很有用:>>>imporPython函数式编程指南之生成器
Python函数式编程指南之生成器,暂停,生成器,位置,异常,代码,简介,工作,培训,函数,方法,生成器(generator)1.生成器简介首先请确信,生成器就是