当前位置: 首页 > news >正文

js中?? 和 || 的区别详解

??|| 的区别详解

在 JavaScript/TypeScript 中,??(空值合并运算符)和 ||(逻辑或运算符)都用于提供默认值,但它们在处理不同值时有关键区别

核心区别

运算符 名称 触发条件 处理假值的方式
?? 空值合并运算符 仅当左侧为 nullundefined 保留假值(0、''等)
|| 逻辑或运算符 当左侧为 任何假值(falsy) 跳过所有假值

假值(falsy)列表

在 JavaScript 中,假值包括:

  • false
  • 0
  • ''(空字符串)
  • null
  • undefined
  • NaN

详细比较

1. 处理 null/undefined

两者行为相同:

null ?? 'default'      // 'default'
undefined ?? 'default' // 'default'null || 'default'      // 'default'
undefined || 'default' // 'default'

2. 处理数字 0

关键区别点:

0 ?? 10  // 0(保留0)
0 || 10  // 10(跳过0)

3. 处理空字符串 ''

'' ?? 'default'  // ''(保留空字符串)
'' || 'default'  // 'default'(跳过空字符串)

4. 处理布尔值 false

false ?? true  // false(保留false)
false || true  // true(跳过false)

5. 处理 NaN

NaN ?? 100  // NaN(保留NaN)
NaN || 100  // 100(跳过NaN)

实际应用场景

适合使用 ?? 的情况:

  1. 0、空字符串或false是有效值 时:

    // 分页组件
    const currentPage = userInput ?? 1; // 0是有效输入// 温度显示
    const temperature = sensorValue ?? 20; // 0是有效温度
    
  2. 需要明确区分 空值(null/undefined)假值(0、''等)

    const fontSize = settings.fontSize ?? 16; 
    // 0 表示小号字体,不应被替换
    

适合使用 || 的情况:

  1. 所有假值都应视为无效 时:

    const username = input || 'Anonymous';
    // 空字符串、null、undefined 都视为无效
    
  2. 布尔值检查:

    const isEnabled = featureFlag || false;
    

Vue 中的使用示例

<template><!-- 显示消息:空消息显示"暂无消息" --><div>{{ message || '暂无消息' }}</div><!-- 显示评分:0分是有效分数 --><div>评分:{{ rating ?? '未评分' }}</div><!-- 显示评论数:0评论是有效值 --><div>评论:{{ commentCount ?? '无' }}</div>
</template><script setup lang="ts">
import { ref } from 'vue';const message = ref('');
const rating = ref(0);
const commentCount = ref(0);
</script>

优先级与结合性

  1. ??|| 可以混合使用,但要注意优先级:

    // 需要括号明确优先级
    const value = (a ?? b) || c;
    const value = a ?? (b || c);
    
  2. ?? 不能直接与 &&|| 组合使用:

    // 语法错误
    a || b ?? c;
    a ?? b || c;// 正确写法
    (a || b) ?? c;
    a ?? (b || c);
    

总结表

| 值 | a ?? b 结果 | a || b 结果 |
|-----------------|---------------|---------------|
| null | b | b |
| undefined | b | b |
| 0 | 0 | b |
| '' | '' | b |
| false | false | b |
| NaN | NaN | b |
| 其他真值 | a | a |

简单记忆

  • ?? 当你想保留 0''false 等有效值
  • || 当你想跳过所有假值(包括 0'' 等)

根据你的具体需求选择正确的运算符,可以避免很多边界情况的 bug!

http://www.jsqmd.com/news/6456/

相关文章:

  • 微信机器人API接口| 个人开发者必备
  • 直击现场! “ 直通乌镇 ”开源赛复赛收官,OpenCSG担任评委,十强藏着哪些产业机会?
  • Python 列表生成式、字典生成式与生成器表达式
  • java 解析json字符串,获取特定的字段值,JsonObject
  • python 批量提取txt数据中的值写入csv
  • 【读书笔记】架构整洁之道 P5-2 软件架构 - 教程
  • 回忆中学的函数
  • Java 一行一行的读取文本,小Demo 大学问
  • 数字化转型业务流程总览图
  • MYSQL数据库取消表的约束
  • 2025 年京东 e 卡回收平台最新推荐排行榜:权威测评实时结算平台,助力用户安全高效转让京东 e 卡
  • 【qml-12】Quick3D达成机器人鼠标拖拽转换视角(无限角度)与滚轮缩放
  • 2025 年挤压造粒机源头厂家最新推荐榜单:前五企业技术实力、服务能力及口碑测评指南对辊挤压/化肥挤压/干粉挤压造粒机厂家推荐
  • 网络与系统攻防技术实验一——逆向破解与Bof
  • “计算机配置\Windows 设置\安全设置\本地策略\审核策略” 配置后不生效
  • 2025 预分散颜料厂家最新推荐榜:超高含量技术 + 合规企业全景指南,纺丝 / 吹膜专用产品选型手册
  • 倍增思想与其优化
  • 2025 年 AI 健康管理领域推荐深护智康,社区、基层公卫、母婴 AI 健康管理、AI + 大健康管理、AI 健康管理师公司推荐
  • 2025 最新权威推荐:全国开锁公司口碑排行榜,含智能锁专项服务与紧急上门品牌详解汽车保险柜开锁/汽车锁开锁/保险柜开锁/智能开锁/快速上门开锁公司推荐
  • 从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式
  • 2025 年透骨液膏药代理加盟 / 足浴包膏药代理加盟 / 青岛膏药代理加盟推荐:青岛步泽药业布泽草本透骨液代理合作解析
  • QMT委托对象orderInfo的属性以及对应的值
  • 2025 年电动门厂家最新推荐排行榜:实力厂家深度解析,含技术认证、案例及选购指南
  • 单链表实现队列
  • 从手机到汽车音响:蚀刻喇叭网的跨界应用前景 - 指南
  • 读人形机器人27太空中
  • 2025 年酒店一次性用品源头厂家最新推荐榜单:含牙签牙线筷子套杯盖等全品类及采购选择指南酒店一次性牙签/牙线/筷子套/杯盖/杯垫/杯套用品 厂家推荐
  • Vue2 和 Vue3 中 watch 用法和原理详解 - 实践
  • 05-FreeRTOS的内存管理
  • 2025攻丝机品牌最新权威推荐排行榜:聚焦全自动攻丝机,半自动等机型,精选攻丝机实力厂商助企业高效选购