Javascript 连接会产生垃圾吗?

Javascript 连接会产生垃圾吗?,javascript,garbage-collection,Javascript,Garbage Collection,我确实在网上搜索了这些信息,有人说是,因为javascript必须创建一个新的字符串对象来存储连接的结果,有人说否,因为字符串对象没有被收集 也许这取决于上下文。例如,如果我有一个对象数组,比如 动物[“蓝狗”、“红狗”、“黄猫”、“红鸟”、“绿鸟”…] 我有一个带有animal和color参数的函数,在这个函数中,我可以像这样访问我的对象: 动物[动物+颜色] 大多数情况下,我在绘制文本时都会进行连接,这显然不会在每帧中发生很多次。因此,即使它变成了垃圾,它也无足轻重。但是,当使用连接作为对象

我确实在网上搜索了这些信息,有人说,因为javascript必须创建一个新的字符串对象来存储连接的结果,有人说,因为字符串对象没有被收集

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

动物[“蓝狗”、“红狗”、“黄猫”、“红鸟”、“绿鸟”…]

我有一个带有
animal
color
参数的函数,在这个函数中,我可以像这样访问我的对象:

动物[动物+颜色]


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

执行类似于
动物[color+“\u”+动物]
的操作会创建一个访问对象的临时值。该临时数据将由垃圾收集器或在块/函数调用结束时收集(取决于实现)

我的假设(基于我自己使用编译器的经验)是,由于结果不是存储在变量中,因此它将被放置在堆栈上,并在函数完成后释放。但是,这同样取决于引擎的编写方式


我绝对不是编译器方面的专家。

动物[color+“\u”+animal]
这样做会为访问对象创建一个临时值。该临时数据将由垃圾收集器或在块/函数调用结束时收集(取决于实现)

我的假设(基于我自己使用编译器的经验)是,由于结果不是存储在变量中,因此它将被放置在堆栈上,并在函数完成后释放。但是,这同样取决于引擎的编写方式


我绝对不是编译器方面的专家。

可能是,也可能不是,这取决于编译器的优化程度

这个
a+b+c
(a+b)+c
,因此有两个串联。(a+b)的结果将是一个临时对象(此处为字符串)。那是垃圾


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

可能是也可能不是,取决于编译器的优化程度

这个
a+b+c
(a+b)+c
,因此有两个串联。(a+b)的结果将是一个临时对象(此处为字符串)。那是垃圾


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

根据我的经验,串接字符串肯定会产生垃圾。我有一个场景,在一个大表中有很多单元格,每个单元格可以分配一个不同的css类(来自一组可能有30种不同组合的组合)。以正常方式执行此操作:

const class=group+empty+active

会产生很多垃圾。我创建了一个memonized函数,该函数接收一个位掩码作为参数,该参数将生成类字符串并以这种方式清除垃圾

这个回复是一个很好的避免事项列表:


根据我的经验,串接字符串肯定会产生垃圾。我有一个场景,在一个大表中有很多单元格,每个单元格可以分配一个不同的css类(来自一组可能有30种不同组合的组合)。以正常方式执行此操作:

const class=group+empty+active

会产生很多垃圾。我创建了一个memonized函数,该函数接收一个位掩码作为参数,该参数将生成类字符串并以这种方式清除垃圾

这个回复是一个很好的避免事项列表:


请提供一些工作代码示例。数组是用整数索引的
animals[animal+“”+color]
是引用对象属性的格式。即使这是一个问题(不是),您还有什么选择?
var数组={“蓝狗”:1,“红狗”:3,“红狐狸”:2,“蓝狐狸”:4}var头、尾、i;头部=[“蓝色”、“红色”];尾巴=[“狗”,“狐狸”];var CONST=1000000;对于(i=0;i
请使用Chrome中的活动探查器尝试此代码以检查您的理论。请提供一些工作代码示例。数组用整数索引
animals[animal+“”+color]
是引用对象属性的格式。即使这是一个问题(不是),您还有什么选择?
var数组={“蓝狗”:1,“红狗”:3,“红狐狸”:2,“蓝狐狸”:4}var头、尾、i;头部=[“蓝色”、“红色”];尾巴=[“狗”,“狐狸”];var CONST=1000000;对于(i=0;i
使用Chrome中的活动探查器尝试此代码以检查您的理论。