You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中单竖线|与双竖线||的区别是什么?

||(逻辑或)和|(按位或)的核心区别

嘿,这个问题问得特别到位——很多JavaScript开发者刚接触这两个符号时,都会因为个别例子的结果相同而忽略它们的本质差异,咱们来好好拆解下:

1. 本质功能完全不同

  • || 是逻辑运算符:它的核心是判断操作数的「逻辑真假」,返回的是第一个被判定为「真值(truthy)」的原操作数;如果所有操作数都是「假值(falsy)」,就返回最后一个假值。
    比如:

    console.log(0 || 1); // 1(0是假值,返回后面的1)
    console.log('' || '默认文本'); // '默认文本'(空字符串是假值)
    console.log(null || undefined || '兜底值'); // '兜底值'
    

    而且它有短路求值的特性:只要找到第一个真值,后面的表达式就不会再执行了,比如console.log('先执行') || console.log('不会执行')只会打印前者。

  • | 是按位运算符:它的核心是操作二进制位,会先把两个操作数转换成32位二进制整数,然后对每一位执行「或操作」(只要对应位有一个是1,结果位就是1),最后再转成十进制数字返回。
    你的例子里0 | 1刚好结果和0||1一致,但换个场景就不一样了:

    console.log(2 || 3); // 2(2是真值,直接返回)
    console.log(2 | 3); // 3(2的二进制是10,3是11,按位或后是11即3)
    console.log(true | false); // 1(true转成1,false转成0,按位或得1)
    

    它没有短路特性,两个操作数都会被完整计算,比如console.log('先执行') | console.log('也会执行')会先后打印两个内容。

2. 常见适用场景差异

  • || 常用来设置默认值,比如:
    const username = inputUsername || '匿名用户';
    
  • | 常用来做位操作,比如快速取整(对正数有效):
    const num = 3.9 | 0; // 3
    

简单来说,你这次遇到的只是巧合——当操作数是0和1时,两者的结果刚好一致,但它们的运行逻辑完全是两回事,换个输入就能立刻看出区别啦!

内容的提问来源于stack exchange,提问作者Broken Disc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:29:13