Greifen Sie mithilfe der Punktnotation auf numerische Eigenschaften eines Objekts zu

Lesezeit: 2 Minuten

Benutzer-Avatar
Enix

Warum können wir auf die Eigenschaften dieses Array-ähnlichen Objekts nicht mit Punktnotation statt mit Klammernotation zugreifen?

function testArray(rat){
  return typeof arguments;
}

console.log(testArray("test")); // "object"

function testArray(rat){
  return arguments.0; // `arguments[0]` works.
}

console.log(testArray("test")); // Throws error.

  • arguments ist “ein Array-ähnliches Objekt entsprechend den Argumenten, die an eine Funktion übergeben werden.” Und nein … Sie können nicht über die Punktnotation auf die n-Index-Eigenschaften zugreifen.

    – Kanon

    16. Juli 2013 um 14:45 Uhr


  • Verwandte: Zugriff auf JavaScript-Eigenschaften: Punktnotation vs. Klammern? und Kann ich einen Javascript-Objekteigenschaftsnamen erhalten, der mit einer Zahl beginnt?. Es gibt auch Warum kann auf das Javascript-Array-Element nicht mit Punktnotation zugegriffen werden? die nach der Begründung dieser Parsing-Regeln fragt.

    – Sebastian Simon

    29. Januar um 6:32 Uhr

Benutzer-Avatar
Denys Séguret

Ihre Frage scheint zu sein, warum wir nicht mit der Punktnotation wie folgt auf Arrays und Array-ähnliche Elemente zugreifen können:

const v = a.0;

Es ist beschrieben in der ECMAScript-Spezifikation:

Die Punktnotation wird durch die folgende syntaktische Umwandlung erklärt:

Mitgliedsausdruck . BezeichnerName

Und Bezeichner dürfen nicht mit einer Ziffer beginnen wie hier beschrieben:

BezeichnerName ::
KennungStart
IdentifierName IdentifierPart
KennungStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence

Was die Begründung betrifft, so hätte es das Schreiben von Zahlenliteralen erschwert, wenn Bezeichnernamen nur aus Ziffern bestehen würden. Eine Ausnahme hätte wahrscheinlich nur für den Array-Zugriff entworfen werden können, aber das hätte die Sprache komplexer gemacht und ohne wirklichen Gewinn von der gemeinsamen Syntax der C-Familie abgewichen.

Sie können:

var arr = [];
arr.foo = 'foo';

console.log(arr.foo); // => 'foo'

  • @WouterHuysentruit Sicher, aber es war eine harte Reise 🙂

    – yckart

    16. Juli 2013 um 14:43 Uhr


  • Ich bezweifle das. Es sieht nicht nach einer sinnvollen Verwendung eines Array-ähnlichen Objekts aus.

    – Denys Séguret

    16. Juli 2013 um 14:44 Uhr

  • @dystroy Natürlich! Aber seine Frage ließ mich mit meinem Gehirn allein, und das ist das Ergebnis 😉

    – yckart

    16. Juli 2013 um 14:45 Uhr

1010070cookie-checkGreifen Sie mithilfe der Punktnotation auf numerische Eigenschaften eines Objekts zu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy