Warum tun diese snippets von JavaScript Verhalten sich anders, obwohl Sie beide einen Fehler?

JS:

var a = {}
var b = {}

try{
  a.x.y = b.e = 1 //Uncaught TypeError: Cannot set property 'y' of undefined
} catch(err) {
  console.error(err);
}
console.log(b.e) //1

JS:

var a = {}
var b = {}

try {
  a.x.y.z = b.e = 1 //Uncaught TypeError: Cannot read property 'y' of undefined
} catch(err) {
  console.error(err);
}

console.log(b.e) //undefined

  • Ich verstehe es nicht. Es gibt keine syntax-Fehler; ich würde also davon ausgehen, dass b.z = 1 und b.e = 1 zuerst ausgeführt (gegebenen rechts-Assoziativität auf =), dann a.x.y.z = ... führen und scheitern; warum b Zuordnung pass in einem Fall und im anderen nicht?
  • Wir sind damit einverstanden, dass das Eigentum y existiert nicht auf a.x; aber das gilt in beiden Fällen. Warum muss es verhindern, dass der right-hand-side-Zuordnung im zweiten Fall aber nicht der erste? Was ist anders in der Reihenfolge der Ausführung? (Ich erwähnte Syntax-error, da das timing auf der syntax-Fehler ist sehr Verschieden von der ein runtime error.)
  • nach dem ausführen von code erhalten Sie Fehler, und als Verwendung als Typ-variable name wieder zu sehen Wert
  • Fand diese beschreiben, wie Javascript gehen Zuweisungsoperator ecma-international.org/ecma-262/5.1/#sec-11.13
  • Was denkst du, was der Unterschied ist? Haben Sie versucht, auf Grund dieses heraus, bevor Sie Fragen? Was hat Ihre Forschung auftauchen? In anderen Worten, haben Sie Ihre Hausaufgaben machen, bevor Sie Fragen?
  • Es ist interessant, aus einer theoretischen Perspektive, aber das fällt definitiv unter die "dies ist der Grund, warum Sie nicht den code schreiben, wie, dass" die Kategorie des unerwarteten Verhalten.

InformationsquelleAutor Kevin Askin | 2019-02-12
Schreibe einen Kommentar