2012-12-29 13 views
6

Auf der offiziellen Dokumentation von JSONWie werden Objekte in JavaScript im Speicher gespeichert?

Ein Objekt ist eine ungeordnete Menge von Name/Wert-Paaren. Ein Objekt beginnt mit mit {(linke Klammer) und endet mit} (rechte Klammer). Jeder Name ist gefolgt von: (Doppelpunkt) und die Name/Wert-Paare sind durch, (Komma) getrennt.

Hinweis Ich bin Neuling Javascript, und aus dem Namen JSON (JavaScript Object Notation) selbst, ich nehme an Objekte in Javascript sind die gleichen wie JSON. Bitte korrigiere mich, falls ich es falsch verstanden habe.

Aus der obigen Definition scheint es, dass die Javascript-Objekte höchstwahrscheinlich entweder durch eine Hashmap oder eine BST oder eine ähnliche Datenstruktur implementiert sind.

Aber wenn ich Key-Wert-Paare in Node Shell einfügen, werden sie serialisiert eingefügt. Dies ist das, was ich in Knoten Shell versucht,

> var a = {} 
undefined 
> a['k1'] = 'a1' 
'a1' 
> a['k3'] = 'a3' 
'a3' 
> a['k2'] = 'a2' 
'a2' 
> a['k4'] = 'a4' 
'a4' 
> a['k5'] = 'a5' 
'a5' 
> a 
{ k1: 'a1', 
    k3: 'a3', 
    k2: 'a2', 
    k4: 'a4', 
    k5: 'a5' } 

Nun a die Schlüsselwertpaare auf den Druck in der gleichen Größenordnung wie die Einführrichtung zurückgeführt. Also meine Fragen sind:

  • Erhalte ich schnelle Lookups für einen Schlüssel? Ich meine Komplexität von O (log (n)) oder besser.
  • Falls JSON keine Datenstruktur wie BST, Hashmap oder ähnliche DS verwendet, wie genau werden dann JSON-Objekte unter dem Speicher abgelegt?

aktualisieren Ok, so was ist Javascript Objekte. Kann jemand die zugrunde liegende Implementierung von Javascript-Objekten kommentieren?

+4

JSON ist eine Notation, wie XML ist eine andere. Es basiert jedoch stark auf Javascript-Objekten, daher der Name. Ansonsten gibt es keine Beziehung. –

+0

Es gibt keine "JSON-Objekte".Auch der Name sollte das sagen ("object notation object"?) – JJJ

+0

@FlorianMargaine Danke Kumpel für Ihren Kommentar. Es war hilfreich. –

Antwort

6

Du verwechselst JSON, die nur ein textbasiertes Serialisierungsformat ermöglicht den einfachen Datenaustausch ist, und schlicht JavaScript-Objekte, die ungeordnete Listen der Objekte sind.

Wie gesagt von the MDN:

Ein Objekt ist eine Sammlung von Eigenschaften ist und eine Eigenschaft ist Verband zwischen einem Namen und einem Wert. Ein Wert der Eigenschaft kann eine Funktion sein, die dann als Methode des Objekts bekannt ist.

Objekte Eigenschaften können als Hash-Maps angesehen werden, da sie nicht geordnet sind. Aber es ist oft ein wenig komplizierter: Wenn Objekte prototypbasiert sind, werden Eigenschaften, die nicht auf einem Objekt gefunden werden, nach den Prototypen gesucht, auf denen es basiert.

Mit Javascript-Objekten erhalten Sie eine garantiert schnelle Suche, da dies ein wesentlicher Bestandteil der Implementierung ist. Aber die Implementierung ist nicht durch die Norm definiert und jede Engine kann ihre eigene haben.

+0

Danke für Ihre Erklärung. Es hat wirklich viele Missverständnisse geklärt. :) –

+0

Gibt es einen Grund, warum ich Javascript-Objekt bekomme in serialisierter Weise (gleich der Reihenfolge der Insertion), im Gegensatz zu Python-Wörterbuch oder C++ STL-Karte. –

+0

Ich sagte, es ist nicht normalisiert, aber es ist vorläufig eine undokumentierte (und nicht garantierte) Funktion. Sehen Sie diese Diskussion darüber: http://code.google.com/p/v8/issues/detail?id=164 –

Verwandte Themen