| vs || ......我使用哪一个是否重要?

Dev*_*ngo 0 javascript logic

我是否使用|是否重要 或|| 作为一个或运营商?两者似乎都可以互换.

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
Run Code Online (Sandbox Code Playgroud)

sky*_*ack 7

是的,存在巨大差异.

运算符|按位运算符 .
我引用链接的文档:

在每个位位置返回一个位,其中一个或两个操作数的相应位是1.

因此,通过使用带有两个数字的运算符,将为您提供另一个由前两个数字构建的数字.

运营商||逻辑运营商 .
它将其操作数计算为布尔值(如果需要,可以想象为隐式转换),并以原始形式返回第一个真值.

碰巧对于某些操作,结果是相同的(例如,如果在保护中使用,其中应用运算符的结果被视为布尔值),无论您决定使用哪个运算符,但它将是更好地了解它们之间的区别.


ROM*_*eer 5

逻辑运算

使用||&&替代|&由于第一批使用"短路"的机制.因此,它们更有效(并且更安全),因为如果左项已经被评估为true/ false,则在不评估最后项的情况下知道结果.

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

true | x     // ReferenceError: x is not defined
true || x    // true
false & x    // ReferenceError: x is not defined
false && x   // false
Run Code Online (Sandbox Code Playgroud)

比特运营

使用|&.

例如:

  • 4|2 回报 6

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

  • 4||2 回报 4

    4是一个"真"值(因为它不是0,false,null,"",undefinedNaN)=>结果不依赖于比特值=>操作员不会逐位