Ta odpowiedź dotyczy starszej wersji coffeescript. Zobacz Jaider's answer above jeśli chcesz bardziej aktualne odpowiedzi (od lipca 2014)
This coffeescript robi to, co chcesz, myślę:
if not MyVariable?
MyVariable = "assign a value"
która produkuje:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
nbjeśli zrobisz zadanie do MyVariable
pierwsze, nawet jeśli ustawisz MyVariable
undefined jak w this code, to kompiluje do:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Wierzę, że to działa, ponieważ !=
wykorzystywane przez CoffeeScripts Existential Operator
(znak zapytania) wymusza undefined
być równym null
.
p.s. Czy rzeczywiście możesz uzyskać if (MyVariable?false){ ... }
do pracy? To nie kompiluje dla mnie, chyba że istnieje przestrzeń między operatorem egzystencjalnej i fałszywego IE MyVariable? false
które następnie sprawia coffeescript sprawdzić jak funkcja powodu false
który myśli jest parametrem dla MyVariable
, for example:
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"
Produkuje:
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");
}
Zobacz również [coffeescript not null lub undefined] (http://stackoverflow.com/q/20010245/1048572) – Bergi
Spróbuj 'jeśli MyVariable isnt undefined' która produkuje' if (MyVariable! == void 0) '. –