これは興味深いものです...要素に設定されたsetAttributeと通常のプロパティセットのパフォーマンスをテストしているときに、奇妙な動作を見つけました。それを通常のオブジェクトでテストしたところ、...それでも奇妙です!
したがって、 object がA = {}
あり、そのプロパティをA['abc_def'] = 1
、 またはのように設定した場合A.abc_def = 1
、それらは基本的に同じです。しかし、A['abc-def']
= 1 またはA['123-def']
= 1 を実行すると、問題が発生します。それはずっと遅くなります。ここでテストをセットアップしました: http://jsfiddle.net/naPYL/1/。それらはすべて、クロムを除くすべてのブラウザーで同じように機能します。おもしろいことに、「abc_def」プロパティの場合、予想どおり、chrome は実際には Firefox や IE よりもはるかに高速です。しかし、「abc-def」の場合は、少なくとも 2 倍遅くなります。
したがって、ここで基本的に(少なくとも私のテストから)何が起こるかは、プロパティに「正しい」構文(ドットプロパティで使用できる合法的なC構文)を使用する場合です-高速ですが、ブラケットを使用する必要がある構文を使用する場合(a [...]) では、困ったことになります。
2 つのモードをこのように区別する実装の詳細を想像しようとしましたが、できませんでした。私の考えでは、これらの非標準の名前をサポートする場合、おそらくすべての名前を同じメカニズムに変換することになり、残りはそのメカニズムにコンパイルされる構文にすぎません。そう 。syntax と [] は、コンパイル後にすべて同じになるはずです。しかし、明らかに何かがここで逆に進んでいます...
V8 のソース コードを見ずに、本当に満足のいく答えを思いつく人はいますか? (練習だと思ってください:-))
jsperf の例を提供してくれた NDM に感謝します。
編集:
明確にするために、もちろん、実際のコード(すでに見つけたもの)からの具体的な回答も必要です。より正確には、その特定の実装の背後にある理由です。これが、「演習として」それを見て、技術的な実装の背後にある理由を見つけようとするように依頼した理由の 1 つです。
しかし、私はまた、このような場合に他の人の心がどのように機能するかを見たいと思っていました. これは「あいまい」に聞こえるかもしれませんが、時々他の人のように考えたり、彼らの視点を取ったりすることは非常に役に立ちます。それはあなた自身の考え方を高めます。