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

?.、??、||分别是什么,又有哪些区别???

在 JavaScript 中,?.??|| 是三种不同的操作符。
1、?.:可选链操作符

?. 是一个可选链操作符,用于安全地访问嵌套属性,而不用担心中间的某个属性可能为 nullundefined,从而避免运行时错误。

const user = {
  name: "Alice",
  address: {
    city: "New York"
  }
};

const city = user?.address?.city; // "New York"
const country = user?.address?.country; // undefined
const name = user?.name; // "Alice"
const age = user?.age; // undefined

2.??:空值合并操作符

?? 是一个空值合并操作符,用于提供默认值。它检查一个值是否为 nullundefined,如果是,则返回一个默认值;否则返回该值本身。

const user = {
  name: "Alice",
  age: null,
  hobbies: undefined,
  address: ""
};

const name = user.name ?? "Unknown"; // "Alice"
const age = user.age ?? 25; // 25
const hobbies = user.hobbies ?? ["Reading", "Hiking"]; // ["Reading", "Hiking"]
const address = user.address ?? "No address"; // ""

3.||:逻辑或操作符

|| 是一个逻辑或操作符,用于提供默认值。它检查一个值是否为“falsy”,如果是,则返回一个默认值;否则返回该值本身。

const value = potentiallyFalsyValue || defaultValue;
//如果 potentiallyFalsyValue 是“falsy”(如 0、false、""、null、undefined、NaN 等),value 将是 defaultValue。
//如果 potentiallyFalsyValue 是任何其他值(包括 true、1、"hello" 等),value 将是 potentiallyFalsyValue。
  • 如果 potentiallyFalsyValue 是“falsy”(如 0false""nullundefinedNaN 等),value 将是 defaultValue

  • 如果 potentiallyFalsyValue 是任何其他值(包括 true1"hello" 等),value 将是 potentiallyFalsyValue

const user = {
  name: "Alice",
  age: 0,
  hobbies: "",
  address: null
};

const name = user.name || "Unknown"; // "Alice"
const age = user.age || 25; // 25
const hobbies = user.hobbies || ["Reading", "Hiking"]; // ["Reading", "Hiking"]
const address = user.address || "No address"; // "No address"

区别

  1. ?.(可选链操作符)

    • 用途:安全地访问嵌套属性,避免因访问 nullundefined 而抛出错误。

    • 行为:如果中间的属性是 nullundefined,返回 undefined,而不是抛出错误。

    • 示例user?.address?.city

  2. ??(空值合并操作符)

    • 用途:提供默认值,仅当值为 nullundefined 时使用默认值。

    • 行为:如果值是 nullundefined,返回默认值;否则返回该值本身。

    • 示例user.age ?? 25

  3. ||(逻辑或操作符)

    • 用途:提供默认值,当值为“falsy”时使用默认值。

    • 行为:如果值是“falsy”(如 0false""nullundefinedNaN 等),返回默认值;否则返回该值本身。

    • 示例user.age || 25

拓展:

Falsy 值

Falsy 值 是那些在布尔上下文中会被转换为 false 的值。JavaScript 中有以下几种 falsy 值:

  1. false:布尔值 false

  2. 0:数字 0

  3. -0:负零(在 JavaScript 中,-00 是等价的,但在某些情况下可以区分)。

  4. 0nBigInt 类型的 0n

  5. "":空字符串。

  6. null:表示“无”的值。

  7. undefined:表示未定义的值。

  8. NaN:表示“非数字”(Not-a-Number)。

Truthy 值

Truthy 值 是那些在布尔上下文中会被转换为 true 的值。几乎所有不是 falsy 的值都是 truthy 值,包括:

  1. 非零数字:如 1, -1, 3.14 等。

  2. 非空字符串:如 "hello", "0" 等。

  3. 对象:包括数组(如 [1, 2, 3])、函数(如 function() {})等。

  4. 布尔值 true

  5. 其他所有值:除了上述 falsy 值之外的所有值。

相关文章:

  • kafka为什么这么快?
  • Java和SQL测试、性能监控中常用工具
  • ZOJ 1011 NTA
  • 【第6章:强化学习基础与深度强化学习—6.4 强化学习在游戏、自动驾驶等领域的应用案例】
  • 网络工程师 (40)常见接入网技术
  • windows10+CPU基于openVINO高速部署yolov5
  • CUDA-内存访问模式
  • Spring Boot (maven)分页3.0版本 通用版
  • JAVA泛型介绍与举例
  • hashcat使用方法记录
  • SpringCould+vue3项目的后台用户管理的CURD【Taurus教育平台】
  • Linux---系统函数
  • 公牛充电桩协议对接单车汽车平台交互协议外发版
  • docker 进阶命令(基于Ubuntu)
  • 【吾爱出品】针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版
  • 基于单片机的开关电源设计(论文+源码)
  • 【spring cloud 3.0微服务部署】第三章:Nacos、LoadBalancer、GateWay、Ribbon集成之网关Gateway部署
  • Dubbo和OpenFeign的对比
  • 信息安全之网络安全
  • IoTDB 常见问题 QA 第五期
  • 李伟任山东省委常委、省纪委书记
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 张广智︱“编年事辑”:打开学人心路历程的窗户
  • 株洲一重病妇女被要求本人到银行取款时去世?当地警方:正在处理
  • 陕西旱情实探:大型灌区农业供水有保障,大旱之年无旱象
  • MSCI中国指数5月调整:新增5只A股、1只港股