与此主题相似: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不能被定义。但是,从函数返回未定义是有效的。
是否存在“更安全”的方法来检查y是否也未定义?
UPDATED阐明了示例和解释:
从注释中可以看出,在第一个if语句(y == null)中使用了double equal而不是(x === null)三重等于,就像第二条if语句一样。聪明的。
?
运算符始终检查值既不是也不null
是undefined
。
y == null
是检查的价值绝对正确的做法y
是要么null
还是undefined
在JavaScript中。
例如,以下CofeeScript代码仅检查null
值:
do_something() if y is null
编译成
if (y === null) do_something();
因此,虽然y?
(y == null
在JS中)检查null
和undefined
,但y isnt null
(y !== null
在JS中)仅检查null
。
检查此答案以获取更多详细信息。
有关JavaScript中的相等性检查的更多信息,请参见此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句