Итак, у нас был случай, когда у нас был бы объект, где ключ - это id (int), а значение - это строка. Но мы заметили, что в большинстве случаев мы ищем идентификатор на основе строки, поэтому мы решили отменить его и сделать строку ключом, а значение - идентификатором. Потому что таким образом, вместо того, чтобы просматривать каждый элемент и сравнивать значения, мы могли бы просто сделать 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
}
Я понимаю, что теперь строка является ключом, и можно получить тот же идентификатор для тех же строк. Но поскольку теперь строка может быть потенциально довольно большой (небольшая вероятность, но, вероятно, максимум 1 КБ на строку), существует ли ограничение длины, которое JS или Android webview накладывает на ключи объекта?
А также есть ли у этой реализации недостатки? Пока я не заметил никаких проблем, но как знать.
Нет, нет ограничений на длину строки (если она умещается в памяти), и ваша реализация тоже кажется хорошей. На самом деле довольно часто эти «перевернутые» массивы, например, имеют логические значения. А что касается строк как ключей: строки - это неизменяемые символы, которые хранятся по определенному адресу, и то, что фактически используется в качестве индекса для массива, - это этот адрес (он же указатель или ссылка), а не сама строка.
источник
Похоже, что в ECMAScript 2016 теперь есть окончательный ответ на этот вопрос. Согласно веб-документации MDN на string.length :
Вы также можете найти это в спецификации языка ECMAScript® 2016 :
источник