使用Google Closure在JavaScript中进行条件赋值:| vs ||

时间:2013-04-12 09:18:27

标签: javascript conditional variable-assignment google-closure

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

我经常使用

var stuff = (condition) ? opt0: opt1;

方法并且最近已经介绍了

var stuff = opt_param || defaultValue;

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

var stuff = opt_param | defaultValue;

正在工作(即使用单个|),但这似乎将变量“输入”变为数字。我无法找到任何关于此的文档,所以这是我的问题:

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

3 个答案:

答案 0 :(得分:1)

|是按位OR:

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

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

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

答案 1 :(得分:1)

简单来说,单个|指的是按位OR运算符,它“对每对位执行OR运算。a OR b会产生1如果ab1“。 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 :(得分:0)

||运算符是短路OR。它指定第一个,如果它是真的或第二个。另一方面,|是按位运算符。它对两个参数执行按位OR。如果第一个求值为0,则按位OR的结果将是第二个参数。

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

请查看Bitwise Operators on MDN