这个coffeescript ......
if x? isnt '' then console.log x
编译到这个javascript ...
if ((typeof x !== "undefined" && x !== null) !== '') {
console.log(x);
}
针对typeof x
undefined
的位置
但是,如果我在当前范围内使用x
,coffeescript会在范围的to中明确声明它,然后不会检查undefined
...
这个coffeescript ......
x = y.z
if x? isnt '' then console.log x
编译到这个javascript ...
var x;
x = y.z;
if ((x != null) !== '') {
console.log(x);
}
如果x
为undefined
,则y.z
最终可能会undefined
。为什么coffeescript不觉得需要在if语句中检查undefined?
答案 0 :(得分:2)
让我们从更明显的案例开始,第二个例子:
编译器知道var x
已声明,即使它未定义,所以它需要做的就是检查值是null
还是undefined
完成x != null
。
然而,在第一个例子中并非如此。 x
尚未在任何地方声明,因此尝试x != null
实际上会抛出ReferenceError
,但typeof x
会返回一个值(如果x
实际上是null
不是undefined
或{{1}}所有将在宇宙中存在。