【问题标题】:Existential conditional assignment operators in CoffeescriptCoffeescript 中的存在条件赋值运算符
【发布时间】:2013-03-16 23:41:52
【问题描述】:

在阅读 Coffeescript 文档时,我被 scant documentation on existential operators 弄糊涂了。文档说明

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

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

【问题讨论】:

    标签: coffeescript operators conditional-operator


    【解决方案1】:

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

    || 运算符的工作方式与它在 JavaScript 中的工作方式完全相同,因此就|| 而言,0'' 之类的东西是错误的; || 检查 JavaScript 意义上的真实性。

    ? 运算符在 JavaScript 中转换为 == null,因此当 anullundefined 时,a ? b 仅是 b? 检查 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)
    

    第一个循环会给你五个煎饼和一个6,第二个循环会给你一个false0''、两个煎饼和一个6

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

    因此,如果您只想要 JavaScript 样式的行为(即 0false'' 将被忽略),那么您可能想要 ||=。如果您只想跳过nullundefined,那么您需要?=

    【讨论】:

    • 我认为您的意思是“#{v} ..”而不是“#{a} ..”,为什么要打印两次?
    • @NickSotiros:我认为你是对的,console.log 调用中的字符串应该(现在确实)使用#{v},而第二个参数应该是a。感谢您的提醒。
    猜你喜欢
    • 2018-06-09
    • 2011-12-31
    • 1970-01-01
    • 2011-03-11
    • 2011-09-18
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多