【问题标题】:| vs || ... Does it matter which one I use? [duplicate]|与 || ...我使用哪一个有关系吗? [复制]
【发布时间】:2015-12-20 00:43:34
【问题描述】:

我是否使用 | 是否重要或 ||作为 or 运算符?两者似乎可以互换使用。

function Sum(num, sum) {
    sum = sum | 0;
    return sum;
}

function SumII(num, sum) {
    sum = sum || 0;
    return sum;
}

console.log(Sum(7));
//0
console.log(SumII(7));
//0

【问题讨论】:

标签: javascript logic


【解决方案1】:

是的,有很大的不同。

运算符|bitwise operator
我引用了链接的文档:

在其中一个或两个操作数的对应位为 1 的每个位位置返回一个。

因此,通过将此运算符与两个数字一起使用,您将得到另一个由前两个数字组成的数字。

运算符||logical operator
它将操作数计算为布尔值(假设需要时进行隐式转换),并以其原始形式返回第一个真值。

碰巧对于某些操作,结果是相同的(例如,如果在警卫中使用,应用运算符的结果被视为布尔值),无论您决定使用哪个运算符,但是最好知道它们之间有什么区别。

【讨论】:

  • 关于它如何与打字稿联合类型一起工作的任何见解?
【解决方案2】:

逻辑运算

使用||&& 而不是|&,因为第一个使用“短路”机制。因此,它们更有效(也更安全),因为如果左项已被评估为 true / false,则无需评估最后一项即可知道结果。

例如:(对于未定义的 x)

true | x     // ReferenceError: x is not defined
true || x    // true
false & x    // ReferenceError: x is not defined
false && x   // false

位操作

使用|&

例如:

  • 4|2 返回6

    4 = 100b
    2 = 010b
    6 = 110b
    (参见每一列的 OR 运算:1 OR 0 = 1, 0 OR 1 = 1, 0 OR 0 = 0)

  • 4||2 返回4

    4 是一个“真”值(因为它不是0falsenull""undefinedNaN)=> 结果不依赖于位值 => 运算符不是按位的

【讨论】:

    【解决方案3】:

    他们不一样

    |是 BITWISE OR 运算符。它取两个操作数的二进制值,并使用 OR 逻辑比较每个位。

    ||是逻辑或运算符。它检查每个操作数的真实性,并使用 OR 逻辑进行比较。

    试一试

    x = 42 || 65 // X now equals 42
    x = 42 | 65 // X now equals 107 - 42 bitwise ORed to 65
    

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 2020-05-08
      • 2013-10-22
      • 2014-03-15
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多