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.
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'
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