【问题标题】:Conditional assignment in JavaScript with Google Closure: | vs ||使用 Google 闭包在 JavaScript 中进行条件赋值: |与 ||
【发布时间】:2013-04-04 18:02:51
【问题描述】:

我正在使用 Google Closure 和 LOVE 条件分配。我经常使用

var stuff = (condition) ? opt0: opt1;

方法和最近被引入

var stuff = opt_param || defaultValue;

但我注意到一个奇怪的行为,因为它似乎是

var stuff = opt_param | defaultValue;

也可以工作(即使用单个 |),但这似乎将变量“类型转换”为数字。我还没有找到任何关于此的文档,所以这是我的问题:

单| 有什么区别?和双||在逻辑和分配方面?我对数字类型转换的假设是否正确,或者只是我一直在摆弄的特殊情况的任意产品?

【问题讨论】:

  • 我看不出这个问题与闭包工具有什么关系。
  • 你说得对,菲利克斯。我只是认为它可能,因为以前只有关闭工具告诉我当我在“类型”方面搞砸了......另外;据我所知,不可能在 |-pipe 这样的特殊字符上得到任何结果,所以这可能就是我错过之前发布的问题的原因。我的错。
  • 不用担心 :) 由于引入了新的搜索引擎,您可以通过将特殊字符放在引号中来搜索它们,例如[javascript] "|" "||".
  • 太棒了!肯定会用那个...!谢谢。

标签: javascript conditional variable-assignment google-closure


【解决方案1】:

简单地说,单个| 指的是按位OR 运算符,它“对每对位执行OR 运算。如果aba OR b,则a OR b 产生1 1"。来自MDN的示例:

     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)

虽然|| 是一个逻辑OR,它计算赋值中的第一个非虚假语句:

  123 || 0      === 123
false || "Text" === "Text"
   "" || true   === true

所以基本上这两个运算符不能互换,可能会导致不同的值:

10 | 2  === 10
10 || 2 === 10

...然而,

9 | 14  === 15
9 || 14 === 9

【讨论】:

    【解决方案2】:

    | 是按位或:

    3 | 4 = 7
    0xFF00FF | 0x00FF00 = 0xFFFFFF
    

    || 是逻辑或,如果是 true,则计算第一个参数,否则计算第二个:

    3 || 4 = 3
    0 || 4 = 0
    

    【讨论】:

      【解决方案3】:

      || 运算符是短路或。如果它是真实的,它会分配第一个或第二个。另一方面,| 是按位运算符。它对两个参数执行按位或。如果第一个计算结果为0,则按位或的结果将是第二个参数。

      两者都是数字时会给出错误的结果。最好选择||

      请查看Bitwise Operators on MDN

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 2017-09-23
        • 2012-05-09
        • 2010-12-18
        • 1970-01-01
        相关资源
        最近更新 更多