我想使用CoffeeScript存在运算符来检查undefined的一些对象属性.但是,我遇到了一个小问题.
像这样的代码:
console.log test if test?
Run Code Online (Sandbox Code Playgroud)
编译为:
if (typeof test !== "undefined" && test !== null) console.log(test);
Run Code Online (Sandbox Code Playgroud)
这是我希望看到的行为.但是,当我尝试将它用于对象属性时,如下所示:
console.log test.test if test.test?
Run Code Online (Sandbox Code Playgroud)
我得到类似的东西:
if (test.test != null) console.log(test.test);
Run Code Online (Sandbox Code Playgroud)
哪个看起来不像是对未定义的检查.我可以实现与使用对象相同(1:1)行为的唯一方法是使用更大的检查:
console.log test.test if typeof test.test != "undefined" and test.test != null
Run Code Online (Sandbox Code Playgroud)
问题是 - 我做错了吗?或者编译后的代码是否足以检查属性是否存在(带有类型转换的空检查)?
所以我正在玩咖啡脚本并得到这种行为:
a?将转化为typeof a !== "undefined" && a !== null;- 那没关系
问题是如果我尝试相同的a.foo?.这次它转化为a.foo != null;
我得到的相同结果a[foo].
是否有"快速"的方法来检查是否a.foo为null或未定义,如有?
Coffeescript使用存在运算符来确定变量何时存在,并且在coffeescript文档中它显示something?会编译到something !== undefined && something !== null但是我注意到我的coffeescript版本只是编译它something !== null所以我写了一个测试来看看这将如何影响我的代码
taco = undefined
if taco?
console.log "fiesta!"
else
console.log "No taco!"
Run Code Online (Sandbox Code Playgroud)
编译为
// Generated by CoffeeScript 1.4.0
(function() {
var taco;
taco = void 0;
if (taco != null) {
console.log("fiesta!");
} else {
console.log("No taco!");
}
}).call(this);
Run Code Online (Sandbox Code Playgroud)
并输出了一些意外,No taco!所以我的问题是两倍.为什么coffeescript不再检查价值是什么undefined以及为什么这是有效的?
我正在Prolog(swi-prolog)中做我的第一步,无法解决以下问题:如何将存在量化的规则包括在我的事实中; 具体来说,我怎么能把句子"每个人都是某人的朋友" \forall x \exists y friend(x,y)作为一个事实呢?到目前为止我发现的每一个问题都只是关于查询而不是事实 谢谢!
我有一个很大的 json 对象。我需要访问x = a.b.c.d.e.f.g. 但是b(或c, d, e...) 可以是未定义的。这个数据结构是从其他地方导入的。
有没有一种方法,试图让分配x有null或undefined没有引发错误?