Esta resposta é para uma versão mais antiga do coffeescript. Veja a resposta de Jaider acima se quiser uma resposta mais atualizada (em julho de 2014)
Este coffeescript faz o que você quer, eu acho:
if not MyVariable?
MyVariable = "assign a value"
Que produz:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb se você fizer uma atribuição para MyVariable
primeiro, mesmo se você definir MyVariable
como indefinido como neste código , então ele compila para:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Eu acredito que isso funciona porque o !=
usado por CoffeeScripts Existential Operator
(o ponto de interrogação) coage undefined
a ser igual anull
.
ps Você pode realmente começar if (MyVariable?false){ ... }
a trabalhar? Ele não compila para mim a menos que haja um espaço entre o operador existencial e falso, ou seja, o MyVariable? false
que faz o CoffeeScript verificá-lo como uma função por causa do false
que ele pensa ser um parâmetro para o seu MyVariable
, por exemplo :
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"
Produz:
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");
}