Questa risposta è per una versione precedente di coffeescript. Vedi la risposta di Jaider sopra se vuoi una risposta più aggiornata (a partire da luglio 2014)
Questo coffeescript fa quello che vuoi, penso:
if not MyVariable?
MyVariable = "assign a value"
Che produce:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb se si assegna MyVariable
prima a, anche se si imposta MyVariable
su undefined come in questo codice , allora si compila in:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Credo che funzioni perché quello !=
usato da CoffeeScripts Existential Operator
(il punto interrogativo) costringe undefined
ad essere uguale a null
.
ps Puoi davvero metterti if (MyVariable?false){ ... }
al lavoro? Non si compila per me a meno che non ci sia uno spazio tra l'operatore esistenziale e false, vale a dire MyVariable? false
che quindi CoffeeScript lo controlla come una funzione a causa della false
quale ritiene che sia un parametro per il tuo MyVariable
, ad esempio :
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"
Produce:
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");
}