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 MyVariablewie 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? falseCoffeeScript überprüft es dann wie eine Funktion, da falsees 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");
}