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 MyVariable
premier, même si vous définissez MyVariable
sur 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? false
que CoffeeScript le vérifie comme une fonction à cause de false
ce 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");
}