0

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

var stuff = (condition) ? opt0: opt1;

方法,最近被引入

var stuff = opt_param || defaultValue;

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

var stuff = opt_param | defaultValue;

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

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

4

3 回答 3

1

|是按位或:

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

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

3 || 4 = 3
0 || 4 = 0
于 2013-04-12T09:24:16.190 回答
1

简而言之,single|指的是按位运算OR符,它“OR对每对位执行操作。如果是或则a OR b产生”。来自MDN的示例:1ab1

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

While||是一个逻辑OR,它评估赋值中的第一个非 falsy 语句:

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

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

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

... 然而,

9 | 14  === 15
9 || 14 === 9
于 2013-04-12T09:29:13.047 回答
0

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

当两者都是数字时,它会给出错误的结果。最好一起去||

请查看MDN 上的位运算符

于 2013-04-12T09:28:07.227 回答