2016-03-26 18 views
2

In JavaScript Sie in der Lage sind, eine Variable oder ein Objekt in ein Array in einer verschiedenen Weise zu platzieren:Ist das JavaScript-Array wirklich vom Typ Karte

array.push(item) 
array[2] = item; 
array[somevariable] = item 

letztere von dem obigen Beispiel ist das, was mich stört

sagen zum Beispiel, dass ich die folgende Variable var somevariable = 'someString';

ich dies als Index in die array zu platzieren wäre in der Lage (oder Schlüssel), wenn Sie es wünschen.

Dieses Verhalten wird meist in der Map Schnittstelle angezeigt, was darauf hindeutet, dass das Array in JavaScript nicht vom Typ List ist.

Eine andere Anmerkung ist, dass die Array object in JavaScript auch eine pop Methode hat, die in der Queue Schnittstelle zu sehen ist.

Also meine Frage ist, welcher Datentyp ist die Array in JavaScript?

+0

ich bin mir nicht sicher, ob diese Frage einfach Ihre Debugger und Ausführen von 'typeof []' Öffnen gelöst werden könnte, das druckt 'object' ... –

+0

@ MatíasFidemraizer Hinweis' typeof function() {} === ' Spaß ction'', gehört aber zum Objekttyp. 'typeof' ist trotz seines Namens nicht immer eine zuverlässige Methode, um den Typ eines Wertes zu erhalten. – Oriol

+0

@Oriol Für mich ist es immer noch zuverlässig, P –

Antwort

4

Arrays sind nur Objekte mit einigen speziellen Methoden und Verhaltensweisen.

Als Objekte können Sie Eigenschaften in ihnen speichern. Der Schlüssel muss eine Zeichenfolge (oder ein Symbol in ES6) sein und der Wert kann alles sein.

Allerdings berücksichtigen Array-Methoden nur die Eigenschaften, deren Namen Array-Indizes sind.

15.4 Array Objects

Array-Objekte geben spezielle Behandlung zu einer bestimmten Klasse von Eigentum Namen. Ein Eigenschaftsname P (in Form eines String-Wertes) ist ein Arrayindex wenn und nur wenn ToString (ToUint32 (P)) zu P gleich und ToUint32 (P) nicht gleich 2 -1.

Es wird empfohlen, nur Array-Indizes in Arrays zu verwenden. Wenn Sie andere Eigenschaften wünschen, können Sie keine Array-Methoden mit ihnen verwenden. Aber dann besser ein normales Objekt verwenden. Oder vielleicht eine ES6-Map, deren Schlüssel und Werte alles sein können.

Die Spezifikation sagt nicht, wie Arrays implementiert werden sollten. Die meisten Implementierungen verwenden eine Art Liste, falls nur Array-Indizes vorhanden sind, wechseln jedoch zu einem Hash, wenn Sie weitere Eigenschaften hinzufügen.

1

Ein Array ist sowohl ein Objekt als auch ein Array. Daher können Sie benannte Eigenschaften genauso hinzufügen, wie Sie einem Objekt oder einer Funktion benannte Eigenschaften hinzufügen können.

können Sie sagen, dass ein Array ist ein Objekt mit:

var a = []; 
console.log(typeof a); 

drucken „Objekt“

Wenn Sie testen müssen, ob eine Variable tatsächlich ein Array ist, können Sie verwenden:

Array.isArray(a); 
+1

Nur FYI, 'Array.isArray()' erfordert eine Polyfill in IE <= 8, falls das Projekt von OP wichtig ist – SmokeyPHP

+0

Ein guter Punkt. Es macht mich so glücklich, dass so wenige Leute heutzutage alte Versionen von IE benutzen. – bhspencer

+0

Ja, ich unterstütze glücklicherweise IE8 oder niedriger jetzt nicht, aber ich weiß, dass einige Leute das tun, also versuche ich, SO für alle Fälle im Hinterkopf zu behalten – SmokeyPHP

Verwandte Themen