Entonces tuvimos un caso en el que tendríamos un objeto, donde la clave es id (int) y el valor es la cadena. Pero notamos que la mayoría de las veces, buscamos id basándonos en la cadena, así que decidimos revertirla y hacer de una cadena la clave y el valor es la id. Porque de esa manera en lugar de revisar cada elemento y comparar valores, podríamos hacerlo var id = storage[text];
. A continuación se muestran los ejemplos de lo que hicimos.
Aquí está el ejemplo de la implementación anterior:
var storage = {
0 : null,
1 : "Hello",
2 : "world!",
3 : "How are you?"
}
Aquí está el ejemplo de la nueva implementación:
var storage = {
"null" : 0,
"Hello" : 1,
"world!" : 2,
"How are you?" : 3
}
Entiendo que ahora la cadena es la clave y está bien obtener la misma identificación para las mismas cadenas. Pero dado que ahora la cadena puede ser potencialmente bastante grande (posibilidad mínima, pero probablemente un máximo de 1 KB por cadena), ¿hay un límite de longitud que JS o Android webview pone en las claves de objeto?
Y además, ¿esta implementación tiene desventajas? No he notado ningún problema hasta ahora, pero nunca se sabe.
No, no hay límite para la longitud de la cadena (siempre que quepa en la memoria) y su implementación también parece estar bien. Es realmente bastante común tener esos arreglos 'invertidos' con, por ejemplo, valores booleanos. Y en cuanto a las cadenas como claves: las cadenas son símbolos inmutables que se almacenan en una determinada dirección, y lo que realmente se usa como índice para la matriz es esa dirección (también conocida como puntero, también conocida como referencia) y no la cadena en sí.
fuente
Parece que con ECMAScript 2016, ahora hay una respuesta definitiva a esta pregunta. De acuerdo con MDN Web Docs sobre string.length :
También puede encontrar esto especificado en la Especificación de idioma ECMAScript® 2016 :
fuente