JavaScript 是一门始于 1995 年的编程语言,如今已成为世界上最流行的编程语言之一,其广泛应用于前端开发、后端开发、移动开发、游戏开发等领域。每年,JavaScript 都会有新特性推出,ES2020 和 ES2021 是 JavaScript 中较新的版本,我们可以看看其中的新特性有哪些。
ES2020 新特性
Nullish 合并运算符(Nullish Coalescing Operator)
以前使用 || 运算符时,会出现一些意外情况。当值为 false, null, undefined, '' 时,|| 运算符看起来像是抛出左手边的值。但实际上值只是假的。这意味着可能也测试为 false , null, 或 undefined 值的某个合法的值被抛弃了。
let height = 0; let maxHeight = height || 100; console.log(maxHeight) // 100
使用 Nullish 合并运算符 ?? 可以解决这个问题:
let height = 0; let maxHeight = height ?? 100; console.log(maxHeight) // 0
可选链操作符(Optional Chaining Operator)
在访问一个深层次嵌套的对象属性时,需要使用 && 运算符进行判断,以避免出现 undefined 或 null:
-- -------------------- ---- ------- ----- ---- - - ------------- - -------- - ----- --------- - - -- ----- ---- - ---- -- ----------------- -- ------------------------- -- ------------------------------- ------------------ -- ---------
使用可选链操作符 ?.,可以写出更加简洁明了的代码:
const city = user?.personalInfo?.address?.city; console.log(city); // "Beijing"
Promise.allSettled()
Promise.all() 会在全部 promise 都完成或者有某个 promise 被 reject 的时后执行。而Promise.allSettled() 方法将在所有 promise 都结束时执行:
-- -------------------- ---- ------- -------------------- ------------------- ------------------------ ------------------ --------------- -- - --------------------- --- -- - -- - ------- ------------ ------ - -- -- - ------- ----------- ------- ------- -- -- - ------- ------------ ------ - - -- -
其他特性
此外,ES2020 还有一些其他的特性,比如: import() 动态导入、BigInt(安全的整数)类型、String 的 matchAll 方法等等。
ES2021 新特性
Promise.any()
Promise.any() 是 Promise.race() 的升级版。Promise.race() 只要有一个 Promise 状态改变就是返回,但 Promise.any() 则是只要其中有一个 Promise 的初始或者变化被解决,就返回该 Promise 的值或者原因。
const promises = [fetch('/api/foo'), fetch('/api/bar'), fetch('/api/baz')]; try { const first = await Promise.any(promises); console.log(first); } catch (error) { console.error(error); }
String.prototype.replaceAll()
ES2021 中,我们可以使用 String.prototype.replaceAll() 方法代替 String.prototype.replace() 方法。
const str = "Hello, World!"; console.log(str.replace(/o/g, "0")); // "Hell0, W0rld!" console.log(str.replaceAll(/o/g, "0")); // "Hell0, W0rld!"
其他特性
除了 Promise.any() 以及 String.prototype.replaceAll() 外,ES2021 中还有一些重要的特性:
- WeakRefs,一种安全的内存引用。
- Logical Assignment Operators,逻辑赋值操作符。
- 数字分隔符,使得数字更易读写。
总结
ES2020 和 ES2021 将 JavaScript 的基础语言进行了完善和拓展,增加了新的特性,让 JavaScript 的语言功能更加完整,更方便地进行编程。前端开发人员可以通过学习这些新特性,提高自己的编程技能,写出更加高效、简洁、易读的代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6481ae9e48841e989412b55d