拼接字符串会产生垃圾吗?

26 浏览
0 Comments

拼接字符串会产生垃圾吗?

我在网络上搜索了这个信息,有些人说因为JavaScript必须创建一个新的字符串对象来存储连接的结果,有些人则说是因为字符串对象不会被回收。

也许这取决于上下文情况。例如,如果我有一个对象数组,如:

animals[\"blue_dog\",\"red_dog\",\"yellow_cat\",\"red_bird\",\"green_bird\"...]

并且我有一个带有animalcolor参数的函数,在这个函数中,我会这样访问我的对象:

animals[animal+\"_\"+color]

大多数情况下,我在绘制文本时进行字符串拼接,显然每个帧不会发生很多次。因此,即使它成为垃圾,也是微不足道的。但是,当使用拼接作为对象的键时,由于循环,这个拼接每个帧可能会发生一千次,然后这可能会成为一个问题。

admin 更改状态以发布 2023年5月21日
0
0 Comments

可能会,取决于编译器的优化程度。

表达式 a + b + c(a + b) + c,因此有两个连接操作。 (a + b) 的结果将会是一个临时对象 (在这里是字符串),这个临时对象是个垃圾。

对于给定的表达式,使用 a.concat(b,c) 的形式在概念上更好。它原则上不需要中间临时对象。

0
0 Comments

做类似 animals[color + "_" + animal] 这样的事会创建一个访问对象的临时值。这个临时值将被垃圾收集器收集或在块/函数调用的末尾释放(取决于实现)。

我的假设(根据在编译器工作的经验)是,由于结果没有存储在变量中,它将被放置在堆栈上,并在函数完成时释放。但是,这又取决于引擎的编写方式。

我绝不是编译器的专家。

0