1. ホーム
  2. javascript

[解決済み] JSオブジェクトのキー(文字列)の長さに制限はありますか?

2023-02-08 13:43:35

質問

キーが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 では動作しませんでしたが、これはおそらくテスト コードによるメモリの問題が原因だと思われます。

一言で言えば、極端な話、長いプロパティ名を使用しても安全です。文字列自体がブラウザが処理できる範囲内に収まっている限り、プロパティ名としても使用できます。