CoffeeScript未定义

在javascript中检查variables是否从未创build,我们只是做

if (typeof MyVariable !== "undefined"){ ... } 

我想知道我是如何做到这一点的?…我尝试类似的东西

 if (MyVariable?false){ ... } 

但是这个检查是否MyVariable是一个函数,如果这样会调用MyVariable(false),如果不是,将调用void(0)或类似的东西。

最后我find了这个简单的方法来做到这一点:

 if (MyVariable?){ ... } 

这将产生:

 if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... } 

更新04/07/2014 演示链接

在这里输入图像说明

首先,回答你的问题:

 if typeof myVariable isnt 'undefined' then # do stuff 

除非需要区分未定义和false(例如,myVariable可以是true,false或undefined),否则Magrangs的解决scheme在大多数情况下都可以工作。

只是要指出,你不应该把你的条件包括在括号里,而且你也不应该使用花括号。

如果所有内容都在同一行,则可以使用then关键字,否则使用缩进来指示条件内部的代码。

 if something # this is inside the if-statement # this is back outside of the if-statement 

希望这可以帮助!

这个答案适用于较早版本的coffeescript。 如果你想得到更新的答案(截至2014年7月),请参阅Jaider的答案,

这coffeescript做你想要的,我想:

 if not MyVariable? MyVariable = "assign a value" 

其中产生:

 if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) { MyVariable = "assign a value"; } 

❑如果您首先对MyVariable进行赋值,即使您将MyVariable设置为undefined( 如此代码中所示) ,则编译为:

 if (!(MyVariable != null)) { MyVariable = "assign a value"; } 

我相信这是有效的,因为CoffeeScripts Existential Operator (问号)所使用的!= undefined等于null

PS你真的可以得到if (MyVariable?false){ ... }工作? 除非存在操作符和假MyVariable? false之间存在空格,否则它不会编译我MyVariable? false MyVariable? false ,然后使CoffeeScript将其作为一个函数进行检查,因为它认为这是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"); } 
 typeof MyVariable isnt "undefined" 

来自js2coffee

除了上面的Jaider的回答 (由于名誉不足我无法评论) ,请注意,如果它是对象/数组内的东西,则是不同的情况:

 someArray['key']? 

将被转换为:

 someArray['key'] != null 

来自js2coffee.org的屏幕截图:

js2coffee.org

我只是使用:

 if (myVariable) //do stuff 

由于未定义是虚假的,它只会做的东西,如果myVariable不是未定义的。

你只需要知道,它会'做'的值为0,“”和null

我发现将一个variables赋值给一个未定义的非空variables的最简洁的方法是使用unless

 unless ( myVar? ) myVar = 'val' 

为什么不使用OR成语呢?

 myVar or 'val' 

所以,结果将等于myVar,除非它是未定义的,在这种情况下它将等于'val'。