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 MyVariable
primero, incluso si lo establece MyVariable
como 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 undefined
a 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? false
que hace que CoffeeScript lo verifique como una función debido a false
que 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");
}