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

And*_*Mao 10 operators conditional-operator coffeescript

在阅读Coffeescript文档时,我对存在运算符的文档很少感到困惑.文件说明

对于您可能正在处理数字或字符串的情况,It(?=)也可用于比||=提供更安全的条件分配.

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

mu *_*ort 19

?||检查完全不同(但重叠)的条件.

||运营商的工作方式完全相同的方式,因为它在JavaScript这样做事情喜欢0''有falsey尽可能||而言; ||检查JavaScript意义上的真实性.

?操作者转换为== null在JavaScript所以a ? b只有banullundefined; ?检查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)
Run Code Online (Sandbox Code Playgroud)

第一个循环会给你五个煎饼一个6,第二个循环会给你一个false,0,''两个煎饼,和6.

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

所以,如果你只想要的JavaScript风格的行为(即0,false''将被忽略不计),那么你可能想||=.如果你只是想跳过nullundefined然后你想?=.

  • 我认为你的意思是"#{v} .."而不是"#{a} ..",为什么打印两次? (2认同)