Esta respuesta es para una versión anterior de coffeescript. Consulte la respuesta de Jaider anterior si desea una respuesta más actualizada (a partir de julio de 2014)
Este coffeescript hace lo que quieres, creo:
if not MyVariable?
MyVariable = "assign a value"
Que produce:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb, si realiza una asignación a MyVariableprimero, incluso si lo establece MyVariablecomo indefinido como en este código , entonces esto se compila en:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Creo que esto funciona porque el !=utilizado por CoffeeScripts Existential Operator(el signo de interrogación) obliga undefineda ser igual anull .
ps ¿Puedes realmente ir if (MyVariable?false){ ... }a trabajar? No se compila para mí a menos que haya un espacio entre el operador existencial y falso, es decir, lo MyVariable? falseque hace que CoffeeScript lo verifique como una función debido a falseque cree que es un parámetro para usted MyVariable, por ejemplo :
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");
}