[解決済み] JSオブジェクトのキー(文字列)の長さに制限はありますか?
質問
キーがid(int)で値が文字列のオブジェクトを用意するケースがありました。しかし、ほとんどの場合、文字列を元にidを調べていることに気づきました。そこで、逆に文字列をキー、値をidにすることにしました。なぜなら、そうすれば、各項目を調べて値を比較する代わりに、単に
var id = storage[text];
. 以下は、私たちが行ったことの例です。
旧来の実装の例です。
var storage = {
0 : null,
1 : "Hello",
2 : "world!",
3 : "How are you?"
}
以下は新しい実装の例です。
var storage = {
"null" : 0,
"Hello" : 1,
"world!" : 2,
"How are you?" : 3
}
現在、文字列がキーであり、同じ文字列に対して同じidを取得しても良いということは理解しています。しかし、今は文字列がかなり巨大になる可能性があるため(可能性は低いですが、おそらく1文字あたり最大1KB)。 は、JSまたはAndroidのウェブビューがオブジェクトのキーに置く長さの制限があるのでしょうか?
また、この実装はデメリットがあるのでしょうか?今のところ問題はないのですが、わからないものですね。
どのように解決するのですか?
少し調べてみました。
MDN は沈黙している であり、仕様書 ( ES5 , ES6 ). これらは、プロパティ・アクセッサは文字列でなければならないと述べているだけで、何の修飾もありません。言い換えれば、この仕様に関する限り、制限はありません。これは驚くべきことではありません。
ブラウザがそれをどのように扱うかは、別の問題です。私が設定した テスト を設定し、いくつかのブラウザで実行してみました。Chrome 40 (Desktop), Chrome 40 (Android 5.1), Firefox 36, Opera 27, IE9+ では、2つまでのプロパティ名を扱うことができます。 27 文字のプロパティ名を扱うことができます。Safari 8 (OS X Yosemite) は 2 文字までのプロパティ名を扱うことができます。 30 文字のプロパティ名を扱うことができます。
IE 以外のブラウザでは、プロパティの最大長は最大文字列長と同じです。IE9+ では、最大文字列長として ~2 30 文字まで扱えますが、オブジェクトキーの制限は 2 27 文字で、他のブラウザと同じです。
このテストは IE8 と iOS の Safari では動作しませんでしたが、これはおそらくテスト コードによるメモリの問題が原因だと思われます。
一言で言えば、極端な話、長いプロパティ名を使用しても安全です。文字列自体がブラウザが処理できる範囲内に収まっている限り、プロパティ名としても使用できます。
関連
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] JavaScriptのオブジェクトにキーと値のペアを追加するにはどうすればよいですか?
-
[解決済み] JavaScriptで日付の書式設定に関するドキュメントはどこにありますか?
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] $.ajax実行中にローディングイメージを表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)