Javascript ES2020 是 Javascript 的最新版本,它有很多新的特性和改进,所有这些都有助于提高开发效率和代码可读性。在本篇文章中,我们将介绍 Javascript ES2020 的一些核心特性和用法,让你更加深入了解这种语言。
BigInt
Javascript 数字类型默认只支持 2<sup>53</sup> - 1 (9,007,199,254,740,991) 之内的整数,超过这个范围的整数会导致精度丢失。BigInt 类型改变了这个限制,在 Javascript 中可以支持更大的整数。它是通过在数字后添加 n
来得到一个 BigInt,例如:
const max = Number.MAX_SAFE_INTEGER; const big = BigInt(max) + BigInt(1); console.log(big.toString()); // 9007199254740993n
Promise.allSettled
Promise.allSettled()
可以接受由 Promise 对象组成的数组,返回一个 Promise 对象,当数组中所有 Promise 对象都已 settle(变为 fulfilled 或 rejected)时,该 Promise 对象 resolve。该方法 返回的 Promise 对象的状态只有 fulfilled。Promise.all()
方法在有一个 Promise 被 rejected 时,就立即结束,并返回一个 rejected 的 Promise 对象。如下:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------ --------------- ------------------ -- ---------------------------- ------------- -- ---------------------- -- ----------------------------- -- --- ------------ ----------- -----------
Optional chaining
当我们需要在一个深层次对象中访问某个属性时,可能需要使用多次判断来避免报错或者 undefined。Optional chaining 的 ?.
操作符可以避免这种繁琐的判断,如果属性存在,则返回其值,否则返回 undefined。
例如我们有一个对象 person,它有一个 address 对象,address 中可能有一个 city 字段,如果我们使用 Optional chaining,则可以这样写:
const city = person?.address?.city;
这将返回 person 的 address 属性的值,如果 address 不存在,城市属性也不存在,那么它将返回 null。
Nullish Coalescing Operator
Nullish Coalescing Operator 可以用于判断一个表达式是否为 null 或者 undefined,如果是,则返回默认值。该操作符使用 ??
,它与 || 的区别在于它仅在左侧操作数为 null 或者 undefined 时返回右侧的默认值。
const value = '' ?? 'default'; // value 为空,返回 "''" const otherValue = null ?? 'default'; // otherValue 为空,返回 "'default'" const anotherValue = false ?? 'default'; // anotherValue 不为空,返回 "false"
在上面的代码中,如果 value 使用 ||,则会返回 'default',但实际上它是一个空字符串,所以我们可以使用 ?? 操作符。
globalThis
在浏览器或 Node.js 环境中使用全局对象时,有时会遇到跨平台差异的问题。Javascript ES2020 提供了 globalThis,它是一个全局变量,可以在任何环境下使用。在浏览器中,它等价于 window,而在 Node.js 中,它等价于 global。例如:
console.log(globalThis.setTimeout === window.setTimeout); // true in a browser console.log(globalThis.setTimeout === setTimeout); // true in Node.js
可省略的 catch 绑定
在一些场合下,我们不需要在 Promise 类型的代码中显式捕获和处理错误。可以使用 try/catch 或 .then() 的方法来处理错误,而使用可省略的 catch 绑定可以使代码更加简洁。如果不想处理错误,我们可以简单地使用下划线_
Promise.resolve('hello world').then(v => console.log(v)); // 输出:hello world Promise.reject(new Error('fail')).catch(_ => console.log_('error!')); // 输出:"error!"
for-in/enumerate
在 ES2020 中,for-in 循环以枚举的方式遍历对象的属性,它与 Object.keys() 不同。for-in 可以枚举原型链中的属性,而 Object.keys() 仅枚举对象自身的属性。由于这个原因,for-in 循环可能非常慢,因此不推荐频繁使用。
const obj = { a: 1, b: 2, c: 3 }; Object.prototype.d = 4; for (const key in obj) { console.log(key); // 输出 "a"、"b"、"c"、"d" } console.log(Object.keys(obj)); // 输出 ["a", "b", "c"]
总结
每一个 Javascript ES2020 的新功能都有着自己的特点和优势,但是我们需要在实际的项目中找到合适的应用场景。在使用它们时,我们应该谨慎使用,并确保我们充分理解每个特性。如果你想要更多全球的 Javascript ES2020 功能细节,请参阅相关文档或查找更多的官方资料 —— MDN Web Docs
等文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645771f2968c7c53b0a25131