花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 37|回复: 4

JS ?? 和 ||

[复制链接]
  • TA的每日心情
    擦汗
    2026-8-21 12:49
  • 签到天数: 1904 天

    [LV.Master]伴坛终老

    3312

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-8-21 12:50 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    在 JavaScript,双问号 ??空值合并运算符,双竖杠 ||逻辑或运算符OR。二者同属于逻辑运算符,语法结构一致:

    function sayHi(user) {
        return `Hi ${user ?? '某某'}!`;
    }
    
    function sayHello(user) {
        return `Hello ${user || '某某'}!`;
    }
    
    console.log(sayHi()); // -> Hi 某某!
    console.log(sayHi('李四')); // -> Hi 李四!
    console.log(sayHello()); // -> Hello 某某!
    console.log(sayHello('李四')); // -> Hello 李四!
        

    上例的两个函数:

    其一:sayHi(user) 返回一个问候语,如果参数 user 调用者按预期传值(字符串值或能转为字符串的值),则使用双问号 ?? 前的 user 作为问候对象,如果不传值或所传值为 null/undefined,问候对象就用“某某”代替。换言之,空值合并运算符 ?? 之前的值若已定义,用它,若值未定义,即为 null 或 undefined 则用“某某”代替。再换言之,函数 sayHi(user) 的 return 语句通过双问号空值合并运算符将两种可能合并成一个值,要么是传参值,要么是“某某”。再体会以下不同形式的 sayHi 调用:

    // 空值属于已定义
    console.log(sayHi('')); // -> Hi !
    
    // true/false属于已定义
    console.log(sayHi(true)); // -> Hi true!
    console.log(sayHi(false)); // -> Hi false!
    
    // null未定义
    console.log(sayHi(null)); // -> Hi 某某!
    
    // undefined 未定义
    console.log(sayHi(undefined)); // -> Hi 某某!
        

    其二:sayHello(user) 函数,return 语句语法结构和双问号的一致。作为逻辑或运算符,双竖杠工作机制是,若 user 不为空('')、不为 0、不为假(false)、不为未定义(null和undefined)就用它,否则用“某某”。体会更多的 sayHello 调用:

     // 0
    console.log(sayHello(0)); // -> Hello 某某!
    
    // 非 0
    console.log(sayHello(2)); // -> Hello 2!
    console.log(sayHello(-0.5)); // -> Hello -0.5!
    
    // 空值
    console.log(sayHello('')); // -> Hello 某某!
    
    // 空格值
    console.log(sayHello(' ')); // -> Hello !
    
    // true/false
    console.log(sayHello(true)); // -> Hello true!
    console.log(sayHello(false)); // -> Hello 某某!
    
    // null/undefined
    console.log(sayHello(null)); // -> Hello 某某!
    console.log(sayHello(undefined)); // -> Hello 某某!
        

    总而言之,双问号和双竖杠运算符都是逻辑运算符,二者语法结构相同,用于确定变量赋值(符号前的值合规,用它,反之用符号后给定的预设值);具体用法在规范上不尽相同,主要区别是,双问号前的值只要不是 null 或 undefined 就用它,反之就用后面设定的值;双竖杠管的宽一些,前面的值包含 ''、0、false、null、undefined 等,是这些值中的任意一个,就取 || 右侧预定义的值,否则取符号左侧的值。依此,现实应用中应灵活选用空值合并运算符逻辑或运算符

    评分

    参与人数 1威望 +30 金钱 +60 经验 +30 收起 理由
    梦江南 + 30 + 60 + 30 匠心独运,细节精致入微!

    查看全部评分

  • TA的每日心情
    开心
    2026-8-21 09:27
  • 签到天数: 817 天

    [LV.10]以坛为家III

    591

    主题

    4万

    回帖

    10万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪缤纷心情心曲飞扬花好月圆飞龙在天音画大师天籁妙音共看流星风雨同行我心永远喜乐安康花潮贵宾

    发表于 2026-8-21 17:49 | 显示全部楼层
    谢谢黑黑老师辛苦,学习了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2026-8-22 00:12
  • 签到天数: 235 天

    [LV.7]常住居民III

    385

    主题

    4021

    回帖

    2万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪七彩绚丽金剪刀开朗大方花潮版主

    发表于 2026-8-21 20:27 | 显示全部楼层
    马老师晚上好~~

    看不懂,那就键盘支持,祝您秋安!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2026-8-21 12:49
  • 签到天数: 1904 天

    [LV.Master]伴坛终老

    3312

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-8-21 23:11 | 显示全部楼层
    梦江南 发表于 2026-8-21 17:49
    谢谢黑黑老师辛苦,学习了。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2026-8-21 12:49
  • 签到天数: 1904 天

    [LV.Master]伴坛终老

    3312

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-8-21 23:12 | 显示全部楼层
    霜染枫丹 发表于 2026-8-21 20:27
    马老师晚上好~~

    看不懂,那就键盘支持,祝您秋安!

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-8-22 04:01 , Processed in 0.068413 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表