ES2020
中对 Javascript
的新增和改进BigInt
- 大整数大整数的出现,突破了原
Javascript
中最大整数为pow(2, 53) - 1
的限制
let maxNum = Number.MAX_SAFE_INTEGER
undefined
maxNum
9007199254740991
++maxNum
9007199254740992
++maxNum
9007199254740992
++maxNum
9007199254740992
let bigInt = 9007199254740992n
undefined
++bigInt
9007199254740993n
++bigInt
9007199254740994n
++bigInt
9007199254740995n
大整数使用方式比较简单,数字后面加个
n
即可。
Javascript
的动态引入,允许你把JS
文件作为一个模块动态的引入到你的应用中。这就像你使用webpack
和Babel
一样。
这个功能可以帮助你处理按需加载的代码,拆分代码,而且,并不需要
webpack
或者其它模块处理器。如果,你喜欢也可以在if-else
块中加载代码。
虽然目前在项目中我们也可以使用,使用方法形如:
async function exportDoc() {
if (xxx) {
return false
}
const { exportWord } = await import(‘./utils/exportDoc.js‘)
exportWord(‘xxx‘)
}
??
空值合并空值合并可以真正的检查
nullish
值,而不是falsely
值。
Javascript
中有很多值经过类型转换都会变为false
而参与判断,该值被称为falsely
值。如:‘‘
、0
、undefined
、null
、false
、NaN
等。
实际开发中,我们更希望知道某个字段是否为真·空值(
undefined
、null
),现在就可以直接使用新的空值合并操作符??
||
),总是返回真值‘‘ || ‘truthy‘
"truthy"
0 || ‘truthy‘
"truthy"
undefined || ‘truthy‘
"truthy"
null || ‘truthy‘
"truthy"
false || ‘truthy‘
"truthy"
NaN || ‘truthy‘
"truthy"
??
),总是返回非空(非 undefined
、 null
)值‘‘ ?? ‘truthy‘
""
0 ?? ‘truthy‘
0
undefined ?? ‘truthy‘
"truthy"
null ?? ‘truthy‘
"truthy"
false ?? ‘truthy‘
false
NaN ?? ‘truthy‘
NaN
?.
可选链可选链的出现,大大减少了重复和不必要的空值判断代码。它允许直接访问复杂数据类型(各种
Object
)任意层级的属性值而不会报错,如果存在就返回对应value
,否则返回undefined
。
var a =
{
key: {
key1: {
key2: {
key3: [0, 1, 2, { key4: true }]
}
}
}
}
如果我想获取
key4
的值
if (
a &&
a.key &&
a.key.key1 &&
a.key.key1.key2 &&
a.key.key1.key2.key3 &&
a.key.key1.key2.key3[3]
) {
key4 = a.key.key1.key2.key3[3].key4
}
true
key4 = a.key ?. key1 ?. key2 ?. key3 ?. [3] ?. key4
true
Promise.allSettled
allSettled
的出现,解决了使用race
和all
方法处理多个并行Ajax
或Promise
,响应结果无法捕捉的问题。它接收一组Promise
,并将所有的处理结果返回 - 不管是resolved
还是rejected
const promiseList = [
Promise.resolve({ code: 0 }),
Promise.reject({ code: -1 }),
Promise.reject(new Error(‘Error occur!!!‘))
]
Promise.allSettled(promiseList).then(res => {
const [res1, res2, res3] = res
console.log(res1, res2, res3)
})
{status: "fulfilled", value: {…}}
status: "fulfilled"
value: {code: 0}
__proto__: Object
{status: "rejected", reason: {…}}
reason: {code: -1}
status: "rejected"
__proto__: Object
{status: "rejected", reason: Error: Error occur!!!
at <anonymous>:4:18}
reason: Error: Error occur!!! at <anonymous>:4:18
status: "rejected"
__proto__: Object
String.prototype.matchAll
matchAll
是String
原型链上的一个新增的方法,它接收一个正则表达式作为参数,返回一个迭代器,触发迭代器时,会从前到后依次返回正则匹配的结果
const regexp = /t(e)(st(\d?))/g;
const str = ‘test1test2‘;
const array = Array.from(str.matchAll(regexp)) || [...str.matchAll(regexp)]
console.log(array[0]);
// expected output: Array ["test1", "e", "st1", "1"]
console.log(array[1]);
// expected output: Array ["test2", "e", "st2", "2"]
str.matchAll(regexp)
===========
["test1", "e", "st1", "1", index: 0, input: "test1test2", groups: undefined]
["test2", "e", "st2", "2", index: 5, input: "test1test2", groups: undefined]
RegExpStringIterator {}
globalThis
不同平台或宿主环境中,全局对象也有不同,比如在浏览器中是
window
,Node
中是global
,web workers
中是self
。
globalThis
可以无视js
的运行环境,始终指向全局对象。
globalThis === window
true
Node
环境Welcome to Node.js v12.18.1.
Type ".help" for more information.
> globalThis === global
true
我们很早就能在导入时重新命名
import * as utils from ‘./utils.js‘
现在我们可以这样进行导出了
export * as utils from ‘./utils.js‘
===================================
上面的结果等同于现在的用法
import * as utils from ‘./utils.js‘
export { utils }
for-in
的顺序ECMA 规范中并没有明确定义 for (x in y) 的顺序。尽管浏览器已经实现了一致的顺序,但是现在它已经被添加到 ES2020 的官方规范中了。
import.meta
import.meta
是由ECMAScript
创建实现的,默认为null
。
<script type="module" src="module.js"></script>
通过
import.meta
访问模块的meta
信息:
console.log(import.meta); // { url: "file:///home/user/module.js" }
它返回一个包含
url
属性的对象,该属性代表着模块的URL
。它可能是获取脚本的URL
(对于外部脚本来说),或者是包含模块文档的基础URL
(对于内联脚本来说)。
原文:https://www.cnblogs.com/xzdm/p/13723301.html