ECMAScript 2020(ES11)是 JavaScript 编程语言的最新版本,它于2020年6月正式发布。本文将介绍ES11中的新特性,包括有用的功能和语言改进,以及如何在你的代码中使用它们。
新特性
1. Nullish 合并运算符
Nullish 合并运算符(??
)是一个新的逻辑运算符,用于判断一个值是否为 null
或者 undefined
,如果是,那么使用默认值。它与 ||
运算符不同,||
运算符会将所有 falsy 值(例如 ''
、0
、false
、null
等)都视为 false,而 ??
运算符只对 null
和 undefined
值返回默认值。
-- -------------------- ---- ------- -- -- -- --- ----- --- - -- -- ---------- -- --------- ----- --- - - -- ---------- -- --------- ----- --- - ---- -- ---------- -- --------- ----- --- - --------- -- ---------- -- --------- -- -- -- --- ----- --- - -- -- ---------- -- -- ----- --- - - -- ---------- -- - ----- --- - ---- -- ---------- -- --------- ----- --- - --------- -- ---------- -- ---------
2. 可选链操作符
可选链操作符(?.
)是一个新的语法,它允许在访问深层次的对象属性或方法时,避免因为中间属性或方法不存在而导致的错误。当使用可选链操作符时,如果中间属性或方法不存在,则返回 undefined
。
const obj = { foo: { bar: 'baz' } }; // 使用可选链操作符 const value = obj?.foo?.bar; // 'baz' // 避免因为中间属性不存在而导致的错误 const value = obj.foo.bar; // TypeError: Cannot read property 'bar' of undefined
3. Promise.allSettled
Promise.allSettled 方法接收一个 Promise 数组作为参数,返回一个 Promise 对象,当数组中所有 Promise 对象都执行完毕时,返回一个数组,数组中每个元素都是一个对象,包含 Promise 对象的执行结果和状态。
-- -------------------- ---- ------- ----- -------- - - ----------------------- ---------------------- ---------------------- -- ----------------------------------------- -- - --------------------- -- - -- - ------- ------------ ------ ----- -- -- - ------- ----------- ------- ----- -- -- - ------- ------------ ------ ----- - -- - ---
4. globalThis
globalThis 是一个新的全局对象,它可以在任何环境下访问到全局对象,包括浏览器、Node.js 和 Web Workers 等环境。在浏览器中,globalThis 指向 window 对象;在 Node.js 中,globalThis 指向 global 对象。
console.log(globalThis); // Node.js: global object / Browser: window object
语言改进
除了上面的新特性之外,ES11 还进行了一些语言改进,包括:
1. String.prototype.matchAll
String.prototype.matchAll 方法可以一次性获取一个字符串中所有匹配的子字符串和匹配信息,返回一个迭代器对象,可以使用 for...of 循环遍历。
-- -------------------- ---- ------- ----- --- - ------- -------- ----- ----- - ----- ----- ------- - -------------------- --- ------ ----- -- -------- - ------------------- -- - -- ---- ------ -- ------ ------- ------- - -- - -- ---- ------ -- ------ ------- ------- - -- - -- ---- ------ -- ------ ------- ------- - -
2. import()
import() 函数可以异步加载一个模块,返回一个 Promise 对象,可以使用 async/await 或者 Promise.then() 方法处理加载完成后的模块。
// 动态加载模块 const module = await import('./module.js'); // 或者 import('./module.js').then(module => { console.log(module); });
总结
ECMAScript 2020(ES11)引入了一些非常有用的新特性和语言改进,包括 Nullish 合并运算符、可选链操作符、Promise.allSettled、globalThis、String.prototype.matchAll 和 import() 函数。这些新特性和语言改进可以让我们更加方便地编写高效的 JavaScript 代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d45679add4f0e0ffc585d4