0

与本主题类似: 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 语句中一样。聪明的。

4

1 回答 1

3

?运算符总是检查值是否既不是null也不是undefined

y == null绝对正确的方法来检查JavaScript的值y是不是null或者是。undefined

例如,以下 CofeeScript 代码仅检查null值:

do_something() if y is null

编译为

if (y === null) do_something();

因此,while y?y == null在 JS 中)同时检查,nullundefined, y isnt nully !== null在 JS 中)仅检查null.

检查此答案以获取更多详细信息。

有关JavaScript 中相等性检查的更多信息,请参阅此答案。

于 2013-10-10T12:00:56.897 回答