为什么 JavaScript 双边字符串文字插值不是二次的?

问题描述 投票:0回答:1

在 JavaScript 中,为什么这个经典的二次追加不是 O(n²)?

s = "";
for (i = 0; i < 1000000; i++) {
  s = `( ${s} )`
};
console.log(s.length)

在 Firefox 124 和 Chromium 123 中都是 O(n)。

在 Python 中,正如预期的那样,它是 O(n²):

s = ""
for i in range(50_000):  # increase by 2x, gets 4x slower
  s = f"( {s} )"
print(len(s))

这是什么魔力,浏览器是如何在这里作弊的? ECMAScript 规范保证这种行为吗?

javascript performance
1个回答
0
投票

这是什么魔力,浏览器是如何作弊的?

绳索

ECMAScript 规范保证这种行为吗?

不,但是每个常见的 JavaScript 引擎都实现了它,并且新的实现几乎必须这样做,因为这是构建字符串的最快方法,因此每个人都是这样做的。

© www.soinside.com 2019 - 2024. All rights reserved.