咖啡存在运算符不同的compliations

时间:2013-10-10 11:46:17

标签: coffeescript

与此主题类似: CoffeeScript Existential Operator and this

coffeescript,我在使用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,咖啡采用了快捷方式,并假设y不能被定义。但是,从函数返回undefined是有效的。

是否有一种“更安全”的方式来检查y是否也未定义?

已更新 澄清的例子和说明:

从注释中,在第一个if语句(y == null)中使用double equal而不是(x === null)三次相等,就像在第二个if语句中一样。聪明。

1 个答案:

答案 0 :(得分:3)

?运算符始终检查值是null还是undefined

y == null绝对是检查JavaScript中y的值是null还是undefined的正确方法。

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

do_something() if y is null

编译为

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

因此,虽然y?(JS中的y == null)同时检查nullundefinedy isnt null(JS中的y !== null)检查仅适用于null

查看this answer以获取更多详细信息。

有关JavaScript中的相等性检查的更多信息,请参阅this answer