6

tl;dr

次のコード行は、オブジェクト (JavaScript String オブジェクトや JavaScript Number オブジェクトなど) を作成して、文字列プリミティブと数値を結合しますか?

var scouterSays = "powerlvl" + 9001;

完全な質問

私は JavaScript でゲーム エンジンを作成しており、ガベージ コレクションには細心の注意を払っています。http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascripthttp://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 オブジェクトも作成されますか?

4

1 に答える 1

-1

私はJavaScriptGCをまったく信頼していません。これが、この言語から離れる基本的な理由です。とにかく、私の返信の試みは次のとおりです。

var x = 1;
alert(typeof x); //number

var n = new Number(1);
alert(typeof n); //object

var scouterSays = "powerlvl" + 9001;
alert(typeof scouterSays); //string

var txt = new String("string");
alert(typeof txt); //object

var test1 = new Boolean(true);
var test2 = String(test1); //convert object to string
alert(typeof test2); //string
于 2013-03-02T22:16:12.330 に答える