我正在使用Google Closure和LOVE条件分配。
我经常使用var stuff = (condition) ? opt0: opt1;
方法并且最近已经介绍了
var stuff = opt_param || defaultValue;
但我注意到一种奇怪的行为,因为它似乎是
var stuff = opt_param | defaultValue;
正在工作(即使用单个|),但这似乎将变量“输入”变为数字。我无法找到任何关于此的文档,所以这是我的问题:
单个|之间有什么区别和双||在逻辑和任务方面?我的假设是关于数字类型转换正确,还是我一直在摆弄的特殊情况的任意产品?
答案 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
如果a
或b
为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 :(得分:0)
||
运算符是短路OR。它指定第一个,如果它是真的或第二个。另一方面,|
是按位运算符。它对两个参数执行按位OR。如果第一个求值为0
,则按位OR的结果将是第二个参数。
当两者都是数字时,它会给出错误的结果。最好选择||
。