前言
随着 Web 技术的发展,JavaScript 作为 Web 前端开发的核心语言,不断地发展和进化。每年 ECMAScript 标准都会发布新版本,带来更多的新特性和功能。本文将介绍 ECMAScript 2020(简称 ES2020)中的新特性。
可选链操作符(Optional Chaining)
在 JavaScript 中,我们经常需要对复杂的对象进行操作,例如 obj.foo.bar.baz()
。但有时候其中的某个属性可能不存在,那么在访问不存在的属性时会抛出异常,导致程序崩溃。为了解决这个问题,ES2020 引入了可选链操作符 ?.
。例如:
let result = obj?.foo?.bar?.baz();
如果 obj.foo
或 obj.foo.bar
或 obj.foo.bar.baz
中的任何一个属性不存在,那么 result
将是 undefined
,而不会抛出异常。
空值合并操作符(Nullish Coalescing)
在 JavaScript 中,当一个值为 falsy(例如 false
、null
、""
等)时,它被视为“空值”。ES2020 引入了空值合并操作符 ??
,用于判断一个值是否为 null 或 undefined,并给予默认值。例如:
let result = firstName ?? lastName ?? "Guest";
如果 firstName
为 null 或 undefined,那么尝试使用 lastName
,如果 lastName
也为 null 或 undefined,那么 result
将是字符串 "Guest"。
BigInt
在 JavaScript 中,Number 类型的数据最大只能表示 2 的 53 次方,如果超出这个范围,就会发生精度丢失。ES2020 引入了 BigInt 类型,可以处理任意大的整数。例如:
const num = BigInt(9007199254740991); console.log(num + 1n); // BigInt(9007199254740992)
需要注意的是,BigInt 类型不能与 Number 类型混用,否则会抛出异常。
Promise.allSettled()
在 JavaScript 中,Promise 是一种用于处理异步操作的对象,它可以简化异步编程。ES2020 引入了 Promise.allSettled() 方法,用于处理多个 Promise,无论 Promise 的状态是 fulfilled 还是 rejected,都会返回结果。例如:
const promises = [ Promise.resolve("Success"), Promise.reject("Error") ]; Promise.allSettled(promises).then(results => { console.log(results[0].status); // "fulfilled" console.log(results[0].value); // "Success" console.log(results[1].status); // "rejected" console.log(results[1].reason); // "Error" });
import() 动态导入
在 JavaScript 中,import 语句只能用于顶层作用域,不能在函数内部使用。ES2020 引入了 import() 方法,用于动态导入模块。例如:
async function loadModule() { const module = await import("./path/to/module.js"); module.doSomething(); }
使用 import() 方法时,返回的是一个 Promise 对象,需要使用 async/await 或者 .then() 来获取导入的模块。
总结
ES2020 引入了许多新特性,使得 JavaScript 语言更加强大和灵活。可选链操作符和空值合并操作符可以简化复杂对象的访问和判断,BigInt 可以处理任意大的整数,Promise.allSettled() 可以处理多个 Promise,import() 方法可以动态导入模块。了解和掌握这些新特性,可以帮助我们更好地编写现代化的 JavaScript 程序。
参考链接
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b048c8add4f0e0ff9a8ca5