tl;博士
以下代码行是否创建了一个对象(如 JavaScript String 对象或 JavaScript Number 对象)来组合字符串原语和数字?
var scouterSays = "powerlvl" + 9001;
完整问题
我正在用 JavaScript 编写游戏引擎,并试图非常小心垃圾收集。我已经阅读了http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript和http://buildnewgames.com/garbage-collector-friendly-code /这非常有帮助。我已经实现了对象池,并且尽可能地避免了数组操作以支持链表。
现在,如果我理解正确,如果我在原始字符串上调用字符串方法,则会创建一个字符串对象并替换我的原始字符串。示例是长度、子字符串、indexOf 等。由于我使用字符串来识别具有对象池的对象类型,因此我担心每次从池中拉出对象时都会产生垃圾。
简而言之,以下是否会导致创建对象(如 JavaScript String 对象或 JavaScript Number 对象)?
var byteSize = 4;
var objectType = "msg" + byteSize; //does this create a JS String/Number object?
var message = gameengine.pool.acquire(objectType);
另外,一个相关的问题是,使用按位运算(如 ~~() 或 << 或 >>)是否也会导致创建 JavaScript 对象?