在javascript中检查是否从未创建过变量,我们只是这样做
if (typeof MyVariable !== "undefined"){ ... }
我想知道如何在coffeescript中这样做吗?...我尝试类似
if (MyVariable?false){ ... }
但是此检查if是否MyVariable是一个函数,如果可以,则将调用MyVariable(false),否则将调用void(0)或类似的函数。
在javascript中检查是否从未创建过变量,我们只是这样做
if (typeof MyVariable !== "undefined"){ ... }
我想知道如何在coffeescript中这样做吗?...我尝试类似
if (MyVariable?false){ ... }
但是此检查if是否MyVariable是一个函数,如果可以,则将调用MyVariable(false),否则将调用void(0)或类似的函数。
if MyVariable isnt undefined哪个产生if (MyVariable !== void 0)。
Answers:
最终,我发现了这种简单的方法:
if (MyVariable?){ ... }
会产生:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
更新04/07/2014 演示链接

item != null
undefined?还是您必须诉诸if typeof myVariable isnt 'undefined'?
==和!=)实际上将null和undefined视为相等的值,因此item != null实际上同时测试null和undefined。如果写为,则不会item !== null。
首先,回答您的问题:
if typeof myVariable isnt 'undefined' then # do stuff
Magrangs的解决方案在大多数情况下都可以使用,除非您需要区分undefined和false(例如,如果myVariable可以为true,false或undefined)。
只是要指出,您不应将条件括在括号中,也不应使用花括号。
该then如果一切都在同一行关键字可以使用,否则使用缩进指示代码是什么里面的条件。
if something
# this is inside the if-statement
# this is back outside of the if-statement
希望这可以帮助!
isnt关键字与!=Coffeescript中的关键字相同,并且如果您习惯使用JavaScript,则可能更具可读性。
!==,不是!=
!=中的@MischaArefiev ,可转换为!==JavaScript。
此答案适用于较旧版本的coffeescript。如果您想要更新的答案,请参阅上面的Jaider的答案(截至2014年7月)
我写的这份咖啡脚本能满足您的需求:
if not MyVariable?
MyVariable = "assign a value"
产生:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
如果您MyVariable首先分配一个Nb ,即使您将此代码设置MyVariable为undefined ,那么它也会编译为:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
我相信这!=是可行的,因为CoffeeScripts Existential Operator(问号)使用的强制undefined等于null。
ps你真的可以if (MyVariable?false){ ... }上班吗?除非存在运算符和false之间存在空格,否则它不会为我编译,因为MyVariable? false这会使CoffeeScript像函数一样检查它,因为false它认为这是您的参数MyVariable,例如:
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"
产生:
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");
}
variable?现在只能编译变量!= NULL
... !== null coffeescript.org/#try:variable%3F
除了以上Jaider的回答(由于信誉不足,我无法评论)之外,请注意,如果它在对象/数组中,则情况会有所不同:
someArray['key']?
将转换为:
someArray['key'] != null
js2coffee.org的屏幕截图:

为什么不只使用OR习惯用法呢?
myVar or 'val'
因此,结果将等于myVar,除非未定义,在这种情况下它将等于“ val”。
'',0.0和false。这可能不是不想要的。