【问题标题】:string + string VS += in Javascript字符串 + 字符串 VS += 在 JavaScript 中
【发布时间】:2021-02-09 10:04:43
【问题描述】:

在空间和/或性能方面,在 Javascript 中将许多字符串文字连接在一起的情况下,添加字符串的更有效方法是什么?

x += y; 要么 x + y; 我一直在思考这个问题。当然,对于只有两个字符串连接在一起的情况,几乎没有区别,但是无论出于何种原因,在 JS 中构建 CSS 或 html 文档或巨大的 XML 文档的情况呢?

string += " classA {}";
...
.....
string += "classX {}";

VS

string + "classA {}" +
...
.....
+ "classX {}";

抱歉,这听起来像是一个基本问题,但是当我不得不用 Java 编写 XML 解析器并实现 StringBuilder 的用法时,我遇到了类似的问题。不确定这如何转化为 JavaSript。

【问题讨论】:

  • x += y 更改x 的值。 x + y 计算表达式但不更改任何一个变量。因此,答案将部分取决于您要完成的工作。
  • @Jayce444 是的,但只是快速检查了前 3 个结果,它们已经完全过时了。甚至有人推荐String#concat,因为出于性能原因,MDN 强烈反对使用该方法。
  • 我非常喜欢 array.push 的可读性:例如const strings = []; strings.push("classA {}"); .... strings.push("classX {}"); return strings.join(" ");。也可以考虑template literals
  • @Jayce 的很多比较都是将它与数组进行比较,而不是我所寻找的,并指的是 IE 是最常用的浏览器之一。

标签: javascript string performance concatenation


【解决方案1】:

这纯粹是你自己的选择。你怎么舒服。没有任何具体的标准。我可以争辩说,当您必须在字符串声明和修改之间使用多个语句时,使用x += y。但是,这仍然取决于您自己的选择。

【讨论】:

    【解决方案2】:

    要修改x吗?更具体地说,x 是否被修改是否重要?

    x + y 本身不会做任何事情,除非用作参数或捕获到变量中。 let z = x + yf(x + y) 一样。

    x += y 等价于x = x + y,因此修改了x,这可能是也可能不是您想要的。

    通常,如果您的意图是“附加到x”并保存结果,那么您会说x += y

    如果您的意图是在其他地方使用xy 的组合,例如f(x + y),那么这是合适的。这里f(x += y) 发送混合消息,因为不清楚你为什么要附加 调用。

    【讨论】:

    • 它们都以变量结尾。我的问题或多或少是关于清除“字符串+字符串”的歧义;很明显,(afaik) 使用 += 时,先前定义的 x 通过调用自身并将 y 添加到其中来添加 y。当您重复执行此操作时,串联会变得非常大。我想这更像是一个问题,如果 Javascript 有类似 StringBuilder 的东西。
    • 如果你有x = x + y,那么它更容易表达为x += y。如果您有f(x + y)let z = x + y,那就另当别论了。如果您正在重复连接,我不会担心它直到您遇到可衡量的性能问题。 JavaScript 非常非常擅长处理字符串数据,并且可以高效地处理,即使直觉上您可能认为它很慢或效率低下。许多人都非常努力地从 JavaScript 中获得这种性能。
    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 2016-01-26
    • 2015-04-02
    • 1970-01-01
    • 2019-05-12
    • 2021-09-19
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多