リソースに非常に制約のある組み込みデバイス ( http://www.espruino.com )用の JavaScript インタープリターを作成していますが、JavaScript を正しく実装したと思うたびに、自分が間違っていることに気付きます。
今の私の質問は について[]
です。JavaScript の最も基本的な部分の 1 つを正しく実装するにはどうすればよいでしょうか?
JavaScript の仕様を調べましたが、適切な部分が見つからない可能性がありますが、有用な答えが見つかりません。
以前は、整数用と文字列用の 2 つの「マップ」が事実上あると想定していました。また、配列の長さは、最大の整数に 1 を加えた値でした。ただし、クロムの jsconsole によると、これは間違っているようです。
var a = [];
a[5] = 42;
a["5"]; // 42
a.length; // 6
だけでなく:
var a = [];
a["5"] = 42;
a[5]; // 42
a.length; // 6
それで...素晴らしい-すべてが文字列に変換され、整数を表す最大値の文字列(プラス1)が長さを取得するために使用されますか? 違う。
var a = [];
a["05"] = 42;
a.length; // 0
"05"
8 進数でも有効な整数です。では、なぜ長さに影響しないのでしょうか?
文字列を整数に変換し、文字列に戻すときに一致することを確認する必要がありますか?
配列またはオブジェクトにアイテムを格納および取得するために使用される正確なアルゴリズムへの参照を持っている人はいますか? とてもシンプルなはずですが、実際はそうではないようです。