与此主题类似: 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语句中一样。聪明。
答案 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
)同时检查null
和undefined
,y isnt null
(JS中的y !== null
)检查仅适用于null
。
查看this answer以获取更多详细信息。
有关JavaScript中的相等性检查的更多信息,请参阅this answer。