Diese Antwort gilt für eine ältere Version von Coffeescript. Siehe Jaiders Antwort oben, wenn Sie eine aktuellere Antwort wünschen (Stand Juli 2014).
Dieses Coffeescript macht, was Sie wollen, denke ich:
if not MyVariable?
MyVariable = "assign a value"
Welches produziert:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb Wenn Sie zuerst eine Zuweisung vornehmen MyVariable
, auch wenn Sie MyVariable
wie in diesem Code auf undefiniert gesetzt haben , wird dies kompiliert zu:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Ich glaube, das funktioniert, weil das !=
von CoffeeScripts verwendete Existential Operator
(das Fragezeichen) dazu zwingt undefined
, gleich zu sein null
.
ps Kannst du tatsächlich if (MyVariable?false){ ... }
zur Arbeit gehen? Es wird für mich nicht kompiliert, es sei denn, zwischen dem existenziellen Operator und false steht ein Leerzeichen, dh MyVariable? false
CoffeeScript überprüft es dann wie eine Funktion, da false
es seiner Meinung nach ein Parameter für Sie ist MyVariable
, zum Beispiel :
if MyVariable? false
alert "Would have attempted to call MyVariable as a function"
else
alert "but didn't call MyVariable as it wasn't a function"
Produziert:
if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
alert("Would have attempted to call MyVariable as a function");
} else {
alert("but didn't call MyVariable as it wasn't a function");
}