ES2020新特性

1. 可选链操作符

  • 可选链操作符 ?. 可以按照操作符之前的属性是否有效,链式读取对象的属性或者使整个对象链返回 undefined。
  • ?. 运算符的作用与 . 运算符类似,不同之处在于,如果对象链上的引用是 nullish (null 或者 undefined),. 操作符会抛出一个错误,而 ?. 操作符则会按照短路计算的方式进行处理,返回 undefined。
  • 可选链操作符也可用于函数调用,如果操作符前的函数不存在,也将会返回 undefined。

应用

在这之前,针对一个对象:obj。查找一个深度嵌套的子属性时,需要使用如下方式取值:

const nestedProp = obj && obj.first && obj.first.second;

为了避免报错,在访问obj.first.second之前,要保证 obj.first 的值既不是 null,也不是 undefined。如果只是直接访问 obj.first.second,而不对 obj.first 进行校验,则有可能抛出错误:

报错: Uncaught TypeError: Cannot read property 'second' of undefined

有了可选链操作符(?.),在访问 obj.first.second 之前,不再需要明确地校验 obj.first 的状态,再并用短路计算获取最终结果:

let nestedProp = obj?.first?.second;

2. 空位合并操作符

当查询某个属性时,为防止该属性为空通常会设置一个默认的值,比如下面两种方式:

let c = a ? a : b // 方式1
let c = a || b // 方式2

这两种方式有个明显的弊端,它都会覆盖所有的假值,如(0, '', false),这些值可能是在某些情况下有效的输入。

let x = {
  profile: {
    name: 'cedric',
    age: ''
  }
}
console.log(x.profile.age || 18) //18

上例中age的属性为空字符串,却被等同为假值。
为了解决这个问题,ES2020诞生了个新特性--空位合并操作符,用 ?? 表示。
如果表达式在??的左侧运算符求值为 undefined 或 null,才会返回其右侧默认值:

var a = null, b = false;
console.log(a ?? '默认值') // "默认值"
console.log(b ?? '测试') // false
posted @   Mr.曹  阅读(998)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示