En javascript pour vérifier si une variable n'a jamais été créée, il suffit de faire
if (typeof MyVariable !== "undefined"){ ... }
Je me demandais comment je fais cela dans coffeescript? ... j'essaie quelque chose comme
if (MyVariable?false){ ... }
mais cette vérification si MyVariable
est une fonction si donc cela appellera MyVariable (false) sinon, cela appellera void (0) ou quelque chose comme ça.
Enfin, j'ai trouvé ce moyen facile de le faire:
if (MyVariable?){ ... }
cela va générer:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
UPDATE 04/07/2014 lien de démonstration
Tout d'abord, pour répondre à votre question:
if typeof myVariable isnt 'undefined' then # do stuff
La solution de Magrangs fonctionnera dans la plupart des cas, sauf lorsque vous devez faire la distinction entre indéfini et faux (par exemple, si myVariable peut être vrai, faux ou indéfini).
Et juste pour souligner, vous ne devriez pas mettre vos conditions entre parenthèses, et vous ne devriez pas utiliser d'accolades.
Le mot-clé then
peut être utilisé si tout se trouve sur la même ligne. Sinon, utilisez l'indentation pour indiquer le code à l'intérieur de la condition.
if something
# this is inside the if-statement
# this is back outside of the if-statement
J'espère que cela t'aides!
Cette réponse concerne une version plus ancienne de coffeescript. Voir réponse de Jaider ci-dessus si vous souhaitez 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"
Qui produit:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
N.b. si vous faites d'abord une affectation à MyVariable
, même si vous définissez MyVariable
sur non défini comme dans ce code , alors ceci est compilé en:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Je crois que cela fonctionne parce que le !=
Utilisé par CoffeeScripts Existential Operator
(Le point d'interrogation) oblige undefined
à être égal à null
.
p.s. Pouvez-vous réellement faire fonctionner if (MyVariable?false){ ... }
? Il ne compile pour moi que s'il existe un espace entre l'opérateur existentiel et false, à savoir MyVariable? false
, Ce qui permet à CoffeeScript de le vérifier comme une fonction à cause du false
qui, selon lui, est un paramètre de 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");
}
typeof MyVariable isnt "undefined"
de js2coffee
En plus de réponse de Jaider ci-dessus (je ne pouvais pas commenter pour des raisons de réputation insuffisante) , veillez à ce que ce soit un cas différent. si c'est quelque chose à l'intérieur d'un objet/tableau:
someArray['key']?
sera converti en:
someArray['key'] != null
Capture d'écran de js2coffee.org :
Je viens d'utiliser:
if (myVariable)
//do stuff
Comme indéfini est faux, cela ne fonctionnera que si myVariable n'est pas indéfini.
Vous devez juste être conscient qu'il va "faire des choses" pour les valeurs qui sont 0, "" et null
La méthode la plus propre que j'ai trouvée pour affecter une variable à une variable non définie et non nulle consiste à utiliser unless
:
unless ( myVar? )
myVar = 'val'
Pourquoi ne pas simplement utiliser l'idiome OR?
myVar or 'val'
Ainsi, le résultat sera égal à myVar, sauf s'il est indéfini, auquel cas il sera égal à 'val'.