CoffeeScript Undefined
Solution 1:
Finally I found this easy way to do it:
if (MyVariable?){ ... }
that will generate:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
UPDATE 04/07/2014 Demo Link
Solution 2:
First, to answer your question:
if typeof myVariable isnt 'undefined' then # do stuff
Magrangs' solution will work in most cases, except when you need to distinguish between undefined and false (for example, if myVariable can be true, false or undefined).
And just to point out, you shouldn't be wrapping your conditions in parentheses, and you shouldn't be using curly braces.
The then
keyword can be used if everything is on the same line, otherwise use indentation to indicate what code is inside of the condition.
if something
# this is inside the if-statement
# this is back outside of the if-statement
Hope this helps!
Solution 3:
This answer is for an older version of coffeescript. See Jaider's answer above if you want a more up to date answer (as of July 2014)
This coffeescript does what you want I think:
if not MyVariable?
MyVariable = "assign a value"
Which produces:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
N.b. if you make an assignment to MyVariable
first, even if you set MyVariable
to undefined as in this code, then this compiles to:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
I believe this works because the !=
used by CoffeeScripts Existential Operator
(the question mark) coerces undefined
to be equal to null
.
p.s. Can you actually get if (MyVariable?false){ ... }
to work? It doesn't compile for me unless there's a space between the existential operator and false i.e. MyVariable? false
which then makes CoffeeScript check it like a function because of the false
which it thinks is a parameter for your MyVariable
, for example:
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"
Produces:
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");
}
Solution 4:
typeof MyVariable isnt "undefined"
from js2coffee
Solution 5:
In addition to Jaider's answer above (I couldn't comment due to insufficient reputation), be careful that it's a different case if it's something inside an object/array:
someArray['key']?
will be converted to:
someArray['key'] != null
Screenshot from js2coffee.org: