Direi che questo è un dettaglio di implementazione per ciò che riguarda la reale struttura della memoria su disco.
In pratica viene assegnata una certa quantità di spazio per origine (solitamente 5MiB, per verificare lo spazio di archiviazione effettivo è possibile utilizzare questo test tool collegato nei documenti MDN) ed è possibile memorizzare i dati (sia in termini di chiavi che di valori) a condizione che non superi quella dimensione, come mostrato in una risposta precedente. Quindi sì lo keys are included in the storage quota.
Come indicato nello strumento di test che ho incluso, i caratteri sono in realtà UTF-16 in modo che occupino 2 byte della quota di archiviazione.
Si noti inoltre che la memoria memorizza le stringhe, questo significa che se si inserisce un float grande come chiave o valore non lo si memorizza nel suo formato binario ma come stringhe!
// These takes up the same space
localStorage.setItem("a", 123);
localStorage.setItem("a", "123");
Infatti se si tenta di fare typeof delle seguenti si ottiene string
in entrambi i casi
localStorage.setItem("123", "");
localStorage.setItem(123, "");
typeof localStorage.key(0); // returns "string"
typeof localStorage.key(1); // returns "string" as well
Per quanto riguarda la seconda parte, in termini di stoccaggio questo
localStorage.setItem("k","");
localStorage.setItem("o","");
localStorage.setItem("h","");
dovrebbe prendi 3 caratteri di memoria dalla tua quota, ovvero 3 * 2 byte se usi UTF-16 o 3 byte se usi UTF-8.
Per una panoramica delle soluzioni di storage locale è possibile controllare qui http://www.html5rocks.com/en/features/storage
La quantità di chiavi è praticamente binaria - '0' o' 1'.Non è possibile avere più chiavi con lo stesso nome, più chiamate a "setItem" sovrascrivono solo il valore precedente. – Bergi
Questo è specifico del browser poiché ciascun browser memorizza i dati in modo diverso, ad es. Chrome/firefox credo utilizzi sqlite dbs, opera xml files –
Ricorda che questo è probabilmente solo ciò che il browser vuole fare con esso. Immagino che memorizzerebbe stringhe a 16 o 32 bit come chiave e valore. Ma non sono sicuro. (Quello che il browser vuole fare è: lo implementano in modo diverso, probs) –