在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
。这可能不是不想要的。