这个 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 语句中是否未定义?
最佳答案
让我们从更明显的情况开始,即第二个示例:
编译器知道 var x
已声明,即使它没有定义,因此它需要做的就是检查该值是否为 null
或 undefined
可以通过 x != null
来完成。
但是,第一个示例中的情况并非如此。 x
尚未在任何地方声明,因此尝试 x != null
实际上会抛出 ReferenceError
,但是 typeof x
> 将返回一个值(如果 x
实际上不是 null
或 undefined
,所有这些都将在宇宙中。
关于javascript - Coffeescript 存在运算符有时会检查未定义的情况,但并非总是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699966/