Coffeescript 如果不为空或未定义,则为中的
在我的Javascript代码中,我处理了许多属性可能为null的json对象:Coffeescript 如果不为空或未定义,则为中的,coffeescript,Coffeescript,在我的Javascript代码中,我处理了许多属性可能为null的json对象: if (store.departments != null) { for(var i = 0; i < store.departments.length; i++) { alert(department.name); } } 这是可以接受的咖啡脚本吗?是否存在这样的情况,在这种情况下它将无法按预期工作?这是怎么回事 if store.departments alert
if (store.departments != null) {
for(var i = 0; i < store.departments.length; i++) {
alert(department.name);
}
}
这是可以接受的咖啡脚本吗?是否存在这样的情况,在这种情况下它将无法按预期工作?这是怎么回事
if store.departments
alert department.name for department in store.departments
或
这两个语句编译为:
var department, _i, _len, _ref;
if (store.departments) {
_ref = store.departments;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
department = _ref[_i];
alert(department.name);
}
}
var部门,\u i,\u len,\u ref;
if(商店、部门){
_ref=仓库部门;
对于(_i=0,_len=_ref.length;_i<_len;_i++){
部门=_ref[_i];
警报(部门名称);
}
}
如果我理解你的要求,那么这段代码并不能满足你的想法
for department in store.departments ? []
看起来您使用的是存在运算符?
,类似于三元运算符a?b:c
。
从coffeescript.org:
检查JavaScript中是否存在变量有点困难。如果(变量)。。。接近,但对于零、空字符串和false失败。CoffeeScript的存在算子?返回true,除非变量为null或未定义,这使得它类似于Ruby的nil
如果我以后想使用这些名称,我会写下如下内容:
if store.departments?
names = (department.name for department in store.departments)
你可以把它全部放在一行,但是如果你理解了列表,那就很难阅读了。存在运算符将测试null&&unde,并且仅当它确实存在时才返回true
如果您想在coffeescript中使用三元运算符,它就不那么简洁了:
for department in if store.departments? then store.departments else []
可能不完全是你想要的,因为这里非常冗长。如果应用商店.部门和如果应用商店.部门之间有区别吗??另外,
提醒部门.名称
仅用于参数-实际应用程序有整个处理块code@trebuchet对有一个区别-存在运算符显式检查null/undefined,因此像“
这样的假值将返回true(”?==true
,即使!!“==false
)。它还可以屏蔽未定义变量的错误(x?
即使x
未定义,也不会抛出错误)。
if store.departments?
names = (department.name for department in store.departments)
for department in if store.departments? then store.departments else []