【ES2020】ES11新增特性-可选链运算符、空值合并运算符、BigInt

1. 新增的运算符

1.1 可选链运算符 ?.

可选链运算符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
?. 操作符的功能类似于.链式操作符,不同之处在于:在引用为空(null 或者 undefined) 的情况下不会引起错误且返回undefined

  • 与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
  • 当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。
const adventurer = {
    
    
  name: 'Alice',
  cat: {
    
    
    name: 'Dinah'
  }
};
// 访问对象属性值
const dogName = adventurer.dog?.name;
console.log(dogName);   //  undefined
// 访问对象的方法函数
console.log(adventurer.someNonExistentMethod?.()); // undefined
1.2 空值合并运算符 ??

空值合并运算符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
与逻辑或运算符(||)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用||来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,’’ 或 0)时。

const foo = null ?? 'default string';
console.log(foo);  // "default string"

const baz = 0 ?? 42;
console.log(baz);  // 0

2. 新增的原始类型 BigInt

JavaScript 所有数字都保存成 64 位浮点数,导致:

  • 数值的精度只能到 53 个二进制位(相当于 16 个十进制位),超过该范围的整数是无法精确表示,不适合进行精确计算。
  • 大于或等于2的1024次方的数值,JavaScript无法表示,会返回Infinity

ES2019 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript的第八种数据类型。BigInt只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
BigInt类型的数据必须添加后缀n,以与Number类型区别:

1234 // 普通整数
1234n // BigInt

// BigInt 的运算
1n + 2n // 3n

BigInt也可以使用各种进制表示,但要加上后缀n。

0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制

BigInt与普通整数是两种值,它们之间并不相等。

42n === 42 // false

typeof运算符对于BigInt类型的数据返回bigint

typeof 123n // 'bigint'

BigInt 可以使用负号(-),但是不能使用正号(+)。

-42n // 正确
+42n // 报错

猜你喜欢

转载自blog.csdn.net/qq_38987146/article/details/121397959