Ta odpowiedź dotyczy starszej wersji Coffeescript. Zobacz odpowiedź Jaidera powyżej, jeśli chcesz uzyskać bardziej aktualną odpowiedź (stan na lipiec 2014)
Myślę, że ten skrypt kawowy robi to, co chcesz:
if not MyVariable?
MyVariable = "assign a value"
Który produkuje:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Uwaga, jeśli dokonasz przypisania do MyVariable
first, nawet jeśli ustawisz wartość MyVariable
undefined, jak w tym kodzie , to kompiluje się do:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Uważam, że to działa, ponieważ !=
używany przez CoffeeScripts Existential Operator
(znak zapytania) wymusza undefined
równość null
.
ps Czy faktycznie możesz zabrać się if (MyVariable?false){ ... }
do pracy? Nie kompiluje się dla mnie, chyba że istnieje spacja między operatorem egzystencjalnym a fałszem, MyVariable? false
co powoduje, że CoffeeScript sprawdza go jak funkcję, z powodu tego, false
co uważa za parametr dla twojego MyVariable
, na przykład :
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");
}