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

Vue.js前端框架教程13:Vue空值合并?? 可选链?.和展开运算符...

文章目录

        • ??(空值合并运算符)
          • 区别
        • | - 逻辑或(Logical OR)
        • || - 空值合并运算符(Nullish Coalescing Operator)
        • ?. - 可选链(Optional Chaining)
        • ... 展开运算符(Spread Operator)

??(空值合并运算符)

??ES2020 新增的空值合并运算符,它只在左侧的操作数为 nullundefined 时才返回右侧操作数的值。如果左侧操作数不是空值,无论其值是 0falseNaN''(空字符串)还是其他假值,都会返回左侧操作数的值。

const a = null;
const b = 'default';

console.log(a ?? b); // 输出 'default'
console.log(0 ?? b); // 输出 0,因为 0 不是 null 或 undefined
console.log(a ?? null ?? b); // 输出 'default',因为第一个操作数是 null,第二个操作数也是 null
console.log('text' ?? b); // 输出 'text',因为 'text' 不是 null 或 undefined
区别
  • || 会在左侧操作数为假值(包括 nullundefined0falseNaN'')时返回右侧操作数的值。
  • ?? 仅在左侧操作数为 nullundefined 时返回右侧操作数的值,对其他假值会返回左侧操作数的值。

因此,|| 更适合用于布尔逻辑和条件运算,而 ?? 更适合用于提供一个默认值,特别是当你想要保留原始值中的假值时。

| - 逻辑或(Logical OR)

JavaScript 中,| 是逻辑或运算符,用于两个布尔值的比较。如果其中一个值为 true,则结果为 true

true | false // true
false | false // false

Vue 模板中,你可以使用它来实现条件渲染:

<template>
  <div v-if="condition1 | condition2">
    <!-- 如果 condition1 或 condition2 为 true,这个元素将被渲染 -->
  </div>
</template>
|| - 空值合并运算符(Nullish Coalescing Operator)

||JavaScript 中用于逻辑或,但它的行为与 | 略有不同。如果左侧的表达式为 nullundefined,则 || 会返回右侧的值。

undefined || 'default' // 'default'
'value' || 'default' // 'value'

Vue 中,这可以用于提供默认值:

<template>
  <div>{{ value || 'default' }}</div>
</template>
?. - 可选链(Optional Chaining)

?.JavaScript 的一个新特性,允许你安全地访问对象的深层属性,即使中间有 nullundefined 的值也不会抛出错误。

const obj = { a: { b: 'value' } };
const value = obj?.a?.b; // 'value'

Vue 中,这可以用于安全地访问响应式数据:

<template>
  <div>{{ obj?.a?.b }}</div>
</template>
… 展开运算符(Spread Operator)

..JavaScript 的展开运算符,用于将数组或对象中的元素展开。

const array = [1, 2, 3];
const newArray = [...array, 4, 5]; // [1, 2, 3, 4, 5]

Vue 中,这可以用于 v-bindv-on 指令:

<template>
  <div v-bind="$attrs"></div>
</template>

这些符号和特性在 Vue 中的使用与在纯 JavaScript 中的使用是一致的,它们提供了更灵活和强大的数据处理能力。


http://www.kler.cn/a/446199.html

相关文章:

  • aosp15 - Activity生命周期切换
  • 介绍 Html 和 Html 5 的关系与区别
  • imx6ull qt多页面控制系统(正点原子imx系列驱动开发)
  • 【信息系统项目管理师】高分论文:论信息系统项目的进度管理(人力资源管理系统)
  • Anaconda3 pypi 清华大学TUNA镜像源使用帮助
  • 在 Unity 6 中使用APV为您的世界创建全局照明的新方法(一)
  • 域名和服务器是什么?域名和服务器是什么关系?
  • Verilog的testbench中模块实例化方法
  • 【网络安全】用 Frida 修改软件为你所用
  • 2025年前端面试热门题目——HTML|CSS|Javascript|TS知识
  • linux-多线程
  • 随手记:微信小程序穿透组件样式穿不过去,样式隔离
  • 【Spring】Spring的模块架构与生态圈—数据访问与集成(JDBC、ORM、Transactions)
  • ML 系列:第 41节 - 假设检验简介
  • html+css网页设计 旅游 移动端 雪花旅行社4个页面
  • 数据库基础-索引
  • Windows11 家庭版安装配置 Docker
  • 11_HTML5 拖放 --[HTML5 API 学习之旅]
  • 51c大模型~合集93
  • 电子电气架构---基于PREEvision的线束设计工作流程优化
  • .net core在linux导出excel,System.Drawing.Common is not supported on this platform
  • HTML、CSS页面资料库
  • 如何写一个转盘
  • 用C#绘制曼德布洛集分形
  • vue项目 中 asstes文件夹 与 static文件夹 的联系与区别
  • React 底部加载组件(基于antd)