Cette réponse concerne une ancienne version de coffeescript. Voir la réponse de Jaider ci - dessus si vous voulez une réponse plus à jour (à partir de juillet 2014)
Ce coffeescript fait ce que vous voulez, je pense:
if not MyVariable?
MyVariable = "assign a value"
Ce qui produit:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb si vous faites une affectation en MyVariablepremier, même si vous définissez MyVariablesur undefined comme dans ce code , alors cela se compile en:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Je pense que cela fonctionne parce que celui !=utilisé par CoffeeScripts Existential Operator(le point d'interrogation) oblige undefinedà être égal ànull .
ps Pouvez-vous réellement vous rendre if (MyVariable?false){ ... }au travail? Il ne compile pas pour moi à moins qu'il n'y ait un espace entre l'opérateur existentiel et false, c'est-à-dire MyVariable? falseque CoffeeScript le vérifie comme une fonction à cause de falsece qu'il pense être un paramètre pour votre MyVariable, par exemple :
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"
Produit:
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");
}