2016-06-26 16 views
1

Ich habe heute mit Regex in JS gespielt und stieß auf eine Datenstruktur, die ich noch nie zuvor gesehen habe: ein Array, wo einige der Einträge Schlüssel haben. Eine Methode, die eine solche Datenstruktur zurückgibt, ist die Regex match Funktion. Hier ist ein Beispiel:Javascript-Array mit Schlüsseln

var re = /SESSID=\w+=;/; 
    var test = 'SESSID=aaaa=;fjsdfjd'; 
    var arr = test.match(re); 
    console.log(arr); // ["SESSID=aaaa=;", index: 0, input: "SESSID=aaaa=;fjsdfjd"] 
    console.log(arr[0]); // SESSID=aaaa=; 
    console.log(arr['index']); // 0 
    console.log(arr['input']); // SESSID=aaaa=;fjsdfjd 

Was ist hier los?

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match#Description – Redu

+2

Beachten Sie, dass das Hinzufügen von Nicht-Index-Eigenschaften zu Arrays dazu führen kann, dass Implementierungen die zugrunde liegenden Daten wechseln Struktur zu einer Hash-Tabelle (oder was auch immer sie für normale Objekte verwenden). Also mach es besser nicht. – Oriol

Antwort

3

Arrays sind nur Objekte. Sie können jede Art von Eigenschaften haben.

Die Eigenschaften, deren Namen numerische Zeichenfolgen sind, sind speziell, weil sie in der Semantik der "length" -Eigenschaft gebunden sind, aber ansonsten sind sie nur einfache Eigenschaften.

Ich sollte beachten, dass während alle der oben genannten wahr ist, gibt es Dinge zu wissen, wenn nicht numerische Eigenschaften zu einem Array hinzufügen. Nicht-numerische Eigenschaften haben keinen Einfluss auf den Wert "length". Daher können Sie .length nicht verwenden, um zu sehen, wie viele es sind. Noch wichtiger ist, dass nicht numerische Eigenschaften nicht in der Ausgabe enthalten sind, wenn ein Array mit JSON.stringify() serialisiert wird.

+0

Super - danke! Wie kann ich ein solches Objekt selbst erstellen? Wenn ich versuche 'var test = ['zero', eins: 'eins'];', bekomme ich einen 'Unexpected token:' Fehler. – kcstricks

+0

@kctricks Sie erstellen das Array und fügen dann Eigenschaften hinzu, genau wie ein normales Objekt. Sie können dies jedoch nicht mit der Array-Initialisierersyntax tun. – Pointy

Verwandte Themen