Nach einem Blick auf einen einfachen hash table implementation in JavaScript gehasht werden, wird der Schlüsselindex wie folgt berechnet:Wie hashtable sicher Objektschlüssel macht in einen eindeutigen Index in JavaScript
function index(str, max) {
var hash = 0;
for (var i = 0; i < str.length; i++) {
var letter = str[i];
hash = (hash << 5) + letter.charCodeAt(0);
hash = (hash & hash) % max;
}
return hash;
}
So im Fall von v8 ich frage mich, , wie es eine ähnliche Funktion verwendet, aber dafür sorgt, dass der Index für das Objekt eindeutig ist. Also, wenn Sie dies tun:
{ a: 'foo', b: 'bar' }
Dann wird es so etwas wie:
var i = index('a', 100000)
// 97
var j = index('b', 100000)
// 98
Aber wenn Sie 100 der oder 1000 oder mehr Tasten auf einem Objekt, wie es scheint, könnte es Kollisionen zu sein.
Sie fragen sich, wie eine Hashtable garantiert, dass sie einzigartig sind und v8 als praktisches Beispiel verwenden.
https://stackoverflow.com/questions/9282869/are-there-limits-to-the-number-of-properties-in-a-javascript- Objekt –
Nein, jede Hashtabellenimplementierung benötigt eine Möglichkeit, mit Kollisionen umzugehen. Wenn Hashes garantiert einmalig wären, hätten sie keinen Größenvorteil. – Bergi
Sie können die Größe einer Zeichenkettenmenge nicht vorhersagen, daher kommt es irgendwann zu Kollisionen. Kollisionen können jedoch mit Sammlungen so einfach wie Warteschlangen behandelt werden. –