Coffeescript中的存在条件赋值运算符

时间:2013-03-26 23:54:09

标签: coffeescript operators conditional-operator

在阅读Coffeescript文档时,我对scant documentation on existential operators感到困惑。文档说明

  

它(?=)也可以用于比||=更安全的条件分配   提供,用于处理数字或字符串的情况。

?=||=运算符之间有什么区别?何时应该使用哪一个?

1 个答案:

答案 0 :(得分:19)

?||检查完全不同(但重叠)的情况。

||运算符与JavaScript中的运算方式完全相同,因此就0而言,''||之类的内容是假的; ||在JavaScript意义上检查真实性。

?运算符在JavaScript中转换为== null,因此当a ? bb或{{1}时,a仅为null }}; undefined检查CoffeeScript意义上的定义。

考虑这些:

?

第一个循环将为您提供五个煎饼和一个for v in [false, 0, '', null, undefined, 6] do (v) -> a = v a ||= 'pancakes' console.log("#{v} ||= 'pancakes':", a) for v in [false, 0, '', null, undefined, 6] do (v) -> a = v a ?= 'pancakes' console.log("#{v} ?= 'pancakes':", a) ,第二个循环将为您提供6false0,两个煎饼和一个{ {1}}。

演示:http://jsfiddle.net/ambiguous/PdLDe/1/

因此,如果您只想要JavaScript风格的行为(即''60将被忽略),那么您可能需要false。如果您只想跳过''||=,则需要null