js新增运算符?.、? ?、? ?=的介绍和使用

使用场景:

        平时在开发项目的时候经常会读取某些对象的属性值,而当这个对象为undefined或者null时,如果直接利用.运算符操作,那么将会直接报错:

所以为了避免出现这种情况,我们需要在读取属性值之前对对象进行空值判断,常用的方法就是三元运算符、if else条件语句判断,以及&&运算符,这些方法会导致代码比较冗余,影响代码可阅读性,维护起来也比较麻烦。

?.(可选链运算符)

let obj = { name: "ggb" };
let obj2;

let name = obj?.name;   //ggb
let name2 = obj2?.name; //undefined


是不是瞬间感觉高大上起来了,并且代码也简洁明了,可选链运算符主要用在读取对象属性值的场景下,它替代传统的if else语句对对象进行空值判断,当对象存在时读取该对象属性值,不存在时就为undefined。

并且?.运算符可以多次调用:

let obj = {
  name: "pzw",
  age: "12",
  child: {
    gender: "男"
  }
}
let gender = obj?.child?.gender;   //男

?? (空值合并运算符)

我相信很多小伙伴在开发的时候遇到过使用!运算符来判断一个变量是否存在时,它会把0也会认为是非状态,例如:

let a = 0;
if(!a){
    a = 0;
} else {
    a++;
}

console.log(a);  // 0

我们如果需要识别0,就得额外添加条件 if( !a || a===0),而当你碰到这个情况的时候,??运算符可以登场了

let a = 0;
let b = 2;
let c;

c = a ?? b;
console.log(c);  // 0

??运算符只有在左边值为undefined或者null时,才会取右边的值。

??=(空值赋值运算符)

在开发过程中,我们通常会利用接口来获取数据,那么当接口返回的数据为空时,我们需要设置一个默认值来保证页面中各级调用能够正常运行。

let a;
let b = { name: "pzw" };
let c = 0;

a ??= b;  // a值为{ name: "pzw" }

c ??= b;  // c值为0

??=运算符只有在左边值为undefined或者null时,才会将右边的值赋给左边。

        以上就是我对新增的运算符的了解,欢迎各位小伙伴指点改正。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为 CSDN 开发的 AI 语言模型,我可以告诉您,ES2023 新增的特性包括:1. Promise.any() 方法;2. WeakRefs 弱引用;3. 数字分隔符;4. String.prototype.replaceAll() 方法;5. Logical Assignment Operators 逻辑赋值运算符;6. Numeric Separators 数字分隔符。以上是我对您问题的回答,希望能够帮到您。 ### 回答2: ES2023是指ECMAScript的下一版标准,它的新增特性有以下几个方面: 1. 数值分隔符(Numeric Separators):ES2023将新增一个下划线(_)作为数值分隔符,以提高数字的可读性和编写代码时的易读性。例如,可以使用数字分隔符将一个大数字分隔成更易读的部分。 2. Promise.any()方法:ES2023将引入Promise.any()方法,该方法返回一个Promise,一旦其中任何一个传入的Promise变为resolve状态,该方法就会立即resolve。这个特性可以用于处理多个异步操作,只要有一个成功即可,无需等待其他。 3. 数值类型千分位分隔符(Intl.NumberFormat):ES2023将提供Intl.NumberFormat构造函数的新特性,使得开发者能够使用千位分隔符来格式化和解析数字。这在国际化开发中特别有用。 4. 字符串用于限制属性名称(Symbol-based Property Restrictions):ES2023将引入Symbol-based Property Restrictions来限制属性名称的值必须为Symbol类型。这样可以避免在使用对象属性时不小心使用了字符串。 5. SharedArrayBuffer 和 Atomics增强:ES2023将对SharedArrayBuffer和Atomics进行一些增强,以提高多线程和并发操作的性能和安全性。 以上就是ES2023新增的一些特性,通过这些特性的引入,可以提高JavaScript开发的效率和代码质量,同时也为多线程和国际化开发提供了更好的支持。 ### 回答3: ES2023是JavaScript的下一个版本,虽然它尚未正式发布,但已经可以预测一些可能的新增特性。以下是可能包含在ES2023中的一些特性: 1. Shared memory and atomics: ES2023可能会引入共享内存和原子操作,这将允许多个线程之间共享数据,并能够以原子方式访问和修改共享数据。 2. Optional chaining: 该特性已经在ES2020中引入。它允许开发者使用?.语法来简化对对象属性或方法的安全访问,避免了因为遇到空值或未定义的情况而导致的错误。 3. Pipeline operator: 管道运算符是一种用于简化函数式编程的语法。它允许通过简洁流畅的方式将函数应用于一系列数据。这个特性在ES2022被正式接受,并且可能进一步改进和扩展。 4. Record and Tuple types: 这两种类型已经被TC39委员会接受为Stage 2特性,并有望在ES2023中正式成为一部分。Record类型允许定义具有固定属性集的对象,而Tuple类型允许定义具有固定长度的数组。 5. Ergonomic brand checks: 这个特性的目标是为了提高类型安全性,同时保持语法的简洁和易读。它将提供一种在编译时对对象进行类型判断的方法,以便在运行时避免错误。 请注意,以上列出的特性只是一些可能会出现在ES2023中的特性,具体实施和变化还有待官方发布和确认。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值