与本主题类似: CoffeeScript Existential Operator 和 this
咖啡脚本,我在使用 elvis 运算符时遇到问题:
foo = ->
y = foo()
console.log 'y is null' unless y?
console.log 'x is null' unless x?
编译为:
var foo, y;
foo = function() {};
y = foo();
if (y == null) {
console.log('y is null');
}
if (typeof x === "undefined" || x === null) {
console.log('x is null');
}
输出:
y is null
x is null
所以问题是,由于 y 是较早分配的,coffee 采用捷径并假设 y 不能未定义。但是,从函数返回 undefined 是有效的。
是否有一种“更安全”的方法来检查 y 是否也未定义?
更新 澄清的例子和解释:
从评论中,在第一个 if 语句 (y == null) 中使用双重相等而不是 (x === null) 三重相等,就像在第二个 if 语句中一样。聪明的。