在 JavaScript 中如今有 8 种基本的数据类型了喔(7 种原始类型和 1 种引用类型)javascript
BigInt 容许开发人员在其 JS 代码中使用更大的整数表示形式进行数据处理。目前在 js 中存储为整数的最大数量为 pow(2, 53) - 1。可是 BigInt 实际上容许你超越此范围。html
可是,如上所示,你须要在数字的末尾附加一个附录。这 n 表示这是一个 BigInt,JavaScript 引擎(v8引擎或它正在使用的任何引擎)应将其区别对待。vue
此改进不向后兼容,由于传统的数字系统是IEEE754(它不能支持这种大小的数字)。java
咱们以前使用的静态导入语法十分简单严格。首先咱们不能动态生成 import 的任何参数。webpack
模块路径必须是原始类型字符串,不能是函数调用,下面这样写行不通:ios
import ... from getModule();
复制代码
其次,咱们没法根据条件或者在运行时导入:web
if() {
import ...;
}
复制代码
{
import ...
// 在块级做用域中使用 import 是会报错的
}
复制代码
这是由于 import / export 旨在提供代码结构的主干,这样便于分析代码结构,便于使用 webpack 根据模块的依赖关系进行静态分析并打包,删除未使用的导出(tree-shaking)。axios
import(module) 表达式加载模块并返回一个 promise,该 promise resolve 为一个包含其全部导出的模块对象。咱们能够在代码中任何位置动态的使用它。数组
import('/example/path/xxx.js')
.then(obj => obj.func())
.catch(err => console.log(err))
复制代码
或者在异步函数中,咱们可使用 let module = await import(modulePath)promise
尽管 import() 看起来像一个函数调用,可是它不是函数,只是一种特殊语法,只是刚好使用了括号(相似于 super())。
若是将组件都静态所有导入到路由文件中,那么在打包的时候代码体积会很大,会影响代码首屏加载速度,咱们能够结合使用 Vue 异步组件和 Webpack 的代码分割功能,实现路由的懒加载,在访问到对应 url 的时候才加载相关组件。
const Foo = () => import('./Foo.vue')
const router = new VueRouter({
routes: [
{ path: '/foo', component: Foo }
]
})
// 或者
const router = new VueRouter({
routes: [
{ path: '/foo', component: () => import('./Foo.vue')}
]
})
复制代码
ES2020 增长了真正检查空值而不是假值的能力。在 JavaScript 中,不少值都是 falsey,例如 空字符串'',0,undefined,null,false,NaN等。
当咱们查询某属性时,常常会给没有该属性就设置一个默认的值,好比下面两种方式:
let c = a ? a : b // 方式1
let c = a || b // 方式2
复制代码
这两种方式有个明显的弊端,它都会覆盖全部的假值,这些值多是在某些状况下有效的输入。
let obj = {
prop: {
name: 'zhuzhu',
age: ''
}
}
console.log(obj.prop.age || 18) //18
复制代码
上例中 age 的属性为空字符串,却被等同为假值,为了解决这个问题,ES2020 诞生了个新特性--空位合并操做符,用 ?? 表示。若是表达式在 ?? 的左侧运算符求值为 undefined 或 null,就返回其右侧默认值。
let c = a ?? b;
// 等价于 let c = a !== undefined && a !== null ? a : b;
复制代码
可选链可让你直接访问深层嵌套的对象的某个属性,而不需进行前置校验。若是不存在,将直接返回 undefined。
// 旧写法
let property = res && res.data && res.data.property
// 新写法
let property = res?.data?.property
// 在访问的某一层为 null/undefined 的话,直接短路计算返回 undefined
复制代码
该 Promise.allSettled 方法接受一个 Promises 数组,而且仅在全部这些 Promises 都已解决(已解决或已拒绝)时返回一个装满 Promises 结果的数组。
方法 str.matchAll(regexp) 是 str.match “新改进的”变体。
它主要用来搜索全部组的全部匹配项。
与 match 相比有 3 个区别:
它返回包含匹配项的可迭代对象,而不是数组。咱们能够用 Array.from 从中获得一个常规数组。 每一个匹配项均以包含分组的数组形式返回(返回格式与不带 g 标记的 str.match 相同)。 若是没有结果,则返回的不是 null,而是一个空的可迭代对象。
let str = '<h1>Hello, world!</h1>';
let regexp = /<(.*?)>/g;
let matchAll = str.matchAll(regexp);
alert(matchAll); // [object RegExp String Iterator],不是数组,而是一个可迭代对象
matchAll = Array.from(matchAll); // 如今返回的是数组
console.log(matchAll)
复制代码
10 New JavaScript Features in ES2020 That You Should Know
使用 axios 作全局异常处理