Wir hatten also einen Fall, in dem wir ein Objekt hätten, in dem der Schlüssel id (int) und der Wert die Zeichenfolge ist. Wir haben jedoch festgestellt, dass wir die ID meistens anhand der Zeichenfolge nachschlagen. Daher haben wir beschlossen, sie umzukehren und eine Zeichenfolge zum Schlüssel zu machen, und der Wert ist die ID. Denn auf diese Weise könnten wir einfach jedes Element durchgehen und Werte vergleichen var id = storage[text];
. Nachfolgend finden Sie Beispiele dafür, was wir getan haben.
Hier ist das Beispiel der alten Implementierung:
var storage = {
0 : null,
1 : "Hello",
2 : "world!",
3 : "How are you?"
}
Hier ist das Beispiel der neuen Implementierung:
var storage = {
"null" : 0,
"Hello" : 1,
"world!" : 2,
"How are you?" : 3
}
Ich verstehe, dass jetzt die Zeichenfolge der Schlüssel ist und es in Ordnung ist, dieselbe ID für dieselben Zeichenfolgen zu erhalten. Aber da die Zeichenfolge jetzt möglicherweise ziemlich groß sein kann (geringe Wahrscheinlichkeit, aber wahrscheinlich maximal 1 KB pro Zeichenfolge), gibt es eine Längenbeschränkung, die JS oder Android Webview für die Objektschlüssel festlegen?
Und hat diese Implementierung auch Nachteile? Ich habe bisher keine Probleme bemerkt, aber Sie wissen es nie.
Nein, die Zeichenfolgenlänge ist unbegrenzt (solange sie in den Speicher passt), und Ihre Implementierung scheint ebenfalls in Ordnung zu sein. Es ist akut üblich, dass diese "umgedrehten" Arrays z. B. boolesche Werte haben. Und zu den Zeichenfolgen als Schlüssel: Die Zeichenfolgen sind unveränderliche Symbole, die an einer bestimmten Adresse gespeichert sind. Als Index für das Array wird tatsächlich diese Adresse (auch als Zeiger oder Referenz bezeichnet) und nicht die Zeichenfolge selbst verwendet.
quelle
Mit ECMAScript 2016 scheint es nun eine endgültige Antwort auf diese Frage zu geben. Laut den MDN-Webdokumenten auf string.length :
Sie finden dies auch in der ECMAScript® 2016-Sprachspezifikation :
quelle