Javascript ==是否创建垃圾?(将字符串与数字进行比较时)

Javascript ==是否创建垃圾?(将字符串与数字进行比较时),javascript,garbage-collection,Javascript,Garbage Collection,我喜欢在比较值时不考虑变量是字符串还是数字,所以我总是使用==,而不是==。但是由于==在比较之前将两个值转换为相同的数据类型,它是否会产生垃圾并加剧游戏中垃圾收集的短暂暂停?如果是,则仅在将字符串与数字进行比较时,还是在将数字与数字、字符串与字符串进行比较时?只有在实际将do类型转换为对象时,=操作符才会创建任何对象。如果比较相同类型的值,则无需为比较创建任何值 但是,您应该尝试确保您的数据是预期的类型。将值放入变量时转换一次要比每次使用时隐式转换便宜。是的,==可以创建垃圾,因为它在执行类型

我喜欢在比较值时不考虑变量是字符串还是数字,所以我总是使用==,而不是==。但是由于==在比较之前将两个值转换为相同的数据类型,它是否会产生垃圾并加剧游戏中垃圾收集的短暂暂停?如果是,则仅在将字符串与数字进行比较时,还是在将数字与数字、字符串与字符串进行比较时?

只有在实际将do类型转换为对象时,
=
操作符才会创建任何对象。如果比较相同类型的值,则无需为比较创建任何值


但是,您应该尝试确保您的数据是预期的类型。将值放入变量时转换一次要比每次使用时隐式转换便宜。

是的,
==
可以创建垃圾,因为它在执行类型强制时可能调用对象上的
.toString()
.valueOf()
方法;这些方法可能会运行混乱(它们可以是用户定义的)

但是不,
==
在比较(原语)字符串和(原语)数字时不会产生垃圾,返回结果后可以(并且将)立即回收进程中分配的所有内存


请注意,若您关心游戏的垃圾收集速度,那个么您最好首先关心一致的值类型。这可能会加快你的游戏速度;当使用
==
时,您可以确保没有创建垃圾。

然后我不知道如何处理从localStorage读取的高分。它们就像弦一样。我会将它们与分数进行比较,以便将它们转换为数字,以避免隐藏对.valueOf()的调用。但在绘制高分时,我也会将它们与文本连接起来,因此如果它们是数字,则会隐藏对.toString()的调用。猜测哪个更糟并不明显。让我看看我是否明白了。假设a=5;和c.b=“5”,当将它们与if(a==c.b)或if(是的)进行比较时,但我不认为比较数组会产生垃圾——它们是直接字符串化的。对象的一个例子是
“5”={valueOf:function(){createlotsofargage();return 5;}
啊好的。我从来没有做过这样奇怪的事情,创建一个会“死亡”的函数马上。从现在开始,我将使用===,但实际上我对如何处理数千个已经存在的===犹豫不决。如果他们不创建垃圾,没有问题。如果他们创建垃圾(或者如果他们导致去优化),那么我应该花时间来更改它们。这就是我问的原因。不,使用
=
没有问题。只使用(太多)不同类型可能会导致反优化。如果对同一类型的操作数使用
==
,它的性能将与
==
一样好。