Ich habe eine nicht definierte Variable und überprüfe ich es in einem String Concat:kann nicht richtig ternären Operator in JavaScript schreibt
var undefinedVariable = undefined;
console.log("foo" + undefinedVariable === undefined ? "bar" : undefinedVariable.toString());
Bedenkt man, dass undefinedVariable nicht definiert ist, undefinedVariable.toString()
ist ein unerreichbarer Code. Allerdings habe ich diesen Fehler:
Uncaught TypeError: Cannot read property 'toString' of undefined(…)
Das Merkwürdige ist, wenn ich „foo“ zu Beginn der console.log entfernen, dann wird der Code funktioniert gut.
Ich habe in Chrom und Firefox getestet und ich bekomme das gleiche Ergebnis, also ist es wahrscheinlich kein Fehler. Gibt es eine Erklärung, warum JS-Engines versuchen, den nicht erreichbaren Teil auszuführen?
^Der Titel ist schlecht für diese Frage formuliert, aber wenn Sie die akzeptierte Antwort lesen, es wird dieses Verhalten erklären. –
@MikeC Nopes ... Nicht ein Betrüger von diesem/Falschen Ziel dupieren. ':)' –
@PraveenKumar Wie ich schon sagte, es ist keine exakte Täuschung, aber der Fehler ist der gleiche. Ternäre Bedingungen werden * nach * Verkettung ausgewertet, was bedeutet, dass 'undefinedVariable.toString() 'unabhängig von' undefinedVariable == undefined 'ausgeführt wird. –