2016-08-26 9 views
3

ich Fehler Dokumentation zu finden, wie/warum die folgenden Werke:JavaScript Eigenschaftenaccessoren in Reihe gewickelt

const data = {one: 1, two: 2} 
const key = ['one'] 

data[key[0]] // 1 
data[key] // 1 
data[[key]] // 1 
data[[[key]]] // 1 
data[[[[key]]]] // 1 
data[['one', 'two']] // undefined 

Was eine beliebige Anzahl von eckigen Klammern ermöglicht den Schlüssel zu umgeben, und immer noch erfolgreich den Schlüssel finden in das Objekt? Gibt es ein bestimmtes Verhalten bei array.length === 1? Und wenn ja, wo finde ich Dokumentation oder Klarheit?

+0

Es ist in [ 'Array # toString()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString) – 4castle

+0

Gerade FYI, dieses Verhalten dokumentiert ist nicht spezifisch für ES 6. Es würde genauso funktionieren, wenn Sie 'const' durch' var' ersetzen würden. –

Antwort

4

Wenn die object[key] Halterung Notation Eigenschaften zuzugreifen, wird die key in eine Zeichenfolge konvertiert. * Die String-Darstellung eines Arrays die mit , verbunden Stringdarstellungen seiner Elemente ist. Bei einem Array mit einem Element entspricht das der String-Darstellung des einzigen Elements.

const foo = {'a,b': 2}; 
console.log(foo[['a', 'b']]); // 2; 

* Oder ein Symbol.

+0

'['a']. ToString() => 'a'', hab es geschafft, danke! –

1

Wenn Sie mit eckigen Klammern auf eine Eigenschaft zugreifen, wird der Schlüssel immer in eine Zeichenfolge konvertiert. Und wenn Sie ein Array in eine Zeichenfolge konvertieren, ist das Ergebnis dasselbe wie beim Aufruf der join()-Methode für das Array. Wenn Sie daher ein Array in eine Zeichenfolge konvertieren, die nur ein Element enthält, das eine Zeichenfolge ist, wird dieses Element selbst generiert. Wenn das Array jedoch zwei Zeichenfolgenelemente enthält (z. B. ['one', 'two']), wird das Zeichen in 'one,two' konvertiert und die data-Variable enthält diesen Schlüssel nicht.

Verwandte Themen