非常にリソースが制限されている組み込みデバイス用のJavaScriptインタプリタを作成しています(http://www.espruino.com)。JavaScriptを正しく実装したと思うたびに間違っていると思います。JavaScript []は本当にどのように機能しますか?
私の質問は約[]
です。 JavaScriptの最も基本的な部分を正しく実装するにはどうすればよいでしょうか?
私はJavaScriptの仕様を見てきましたが、正しいビットを見つけられなかったかもしれませんが、役に立つ答えが見つかりません。
私はこれまで、整数と文字列の2つの「マップ」が効果的に存在すると想定していました。そして配列の長さは最高の整数に1を加えた値でした。
var a = [];
a[5] = 42;
a["5"]; // 42
a.length; // 6
も:しかし、これはクロムのjsconsoleによると、間違っているようだ
var a = [];
a["5"] = 42;
a[5]; // 42
a.length; // 6
そう...素晴らしい - すべてが文字列に変換され、整数を表し、最高値文字列れます長さを取得するために(プラス1)使用されていますか?違う。
var a = [];
a["05"] = 42;
a.length; // 0
"05"
は、8進数でも有効な整数です。それでなぜそれが長さに影響しないのですか?
文字列を整数に変換してから、文字列に変換して一致するかどうかを確認する必要がありますか?
配列やオブジェクトに項目を格納して取得するために使用される正確なアルゴリズムについてのリファレンスはありますか?それは非常にシンプルでなければならないようですが、実際にはそうではないように見えます!
[標準](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4)は、「*プロパティ名 'P'(' String'の形で) ToString(ToUint32(P))が 'P'で、' ToUint32(P) 'が' 2 ** 32-1'。* "と等しくない場合にのみ、配列インデックスです。 – DCoder
あなたがインタプリタを書いているなら、仮定は使用すべきではありません。あなたは仕様を読んでいるはずです。 –
V8など、既存の強力で標準に準拠したJS実装を使用してみませんか?私がhttp://www.espruino.com/Performanceで読んだことは恐ろしいものでした: -/ – Bergi