ES6查漏补缺
1. let 和const 命令
-
不存在变量提升
-
let 是块级作用域,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响
const命令同样适用 -
let不允许在相同作用域内,重复声明同一个变量
重点: let实际上为 JavaScript 新增了块级作用域,即外层代码块不受内层代码块的影响
- 块级作用域内部,优先使用函数表达式
- const声明一个只读的常量。一旦声明,常量的值就不能改变;const一旦声明变量,就必须立即初始化,不能留到以后赋值,只声明不赋值,就会报错。
- var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
2. 数组的解构赋值
- 只要等号两边的模式相同,左边的变量就会被赋予对应的值
- 不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组
- 解构赋值允许指定默认值
对象的解构赋值
- 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值
- 解构后重命名 XXX:XX
- 对象的解构也可以指定默认值
- 如果要将一个已经声明的变量用于解构赋值,必须非常小心
上面代码将整个解构赋值语句,放在一个圆括号里面,就可以正确执行
字符串的解构赋值
-
字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象
-
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值
变量的解构赋值用途
-
交换变量的值
-
从函数返回多个值
-
函数参数的定义,解构赋值可以方便地将一组参数与变量名对应起来
3.模板字符串
`xxx ${变量} xxxx`
4. 字符串新增的方法
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
这三个方法都支持第二个参数,表示开始搜索的位置
- repeat方法返回一个新字符串,表示将原字符串重复n次
- replaceAll()方法,可以一次性替换所有匹配,返回一个新字符串,不会改变原字符串
5. 数值的扩展
-
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法
-
数值分隔符
-
Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity
-
Number.isNaN()用来检查一个值是否为NaN
-
ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变
-
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用
- ES2020 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
6. 函数的扩展
- ES6 允许为函数的参数设置默认值,即直接写在参数定义的后
- 函数的 length 属性
- 作用域
- 利用参数默认值,可以指定某一个参数不得省略
- rest 参数
- ES6 允许使用“箭头”(=>)定义函数
- try catch语句
try{
// 可能会导致错误的代码
} catch(error){
// 在错误发生时怎么处理
}
//虽然在 try-catch 语句中是可选的,但 finally 子句一经使用,
其代码无论如何都会执行
function testFinally(){
try {
return 2;
} catch (error){
return 1;
} finally {
return 0;
}
}
//调用这个函数只能返回 0。
//如果把 finally 子句拿掉,这个函数将返回 2
7. 数组的扩展
- 扩展运算符
- Array.from()
- entries(),keys() 和 values()
- flat()
- 数组的空位
8. 对象的扩展
- 1.属性的简洁表示法
- 2.属性名表达式
- 3.属性的遍历
9. 运算符的扩展
- 1.指数运算符 (**)
- 2.Null 判断运算符
10.Promise 对象
- 1.Promise 的含义
- 2.基本用法
- 3.then()链式调用
- 4.catch()
- 5.finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作
- 6.Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
11.async 函数
- 1.基本用法
- 2.async 函数有多种使用形式
- 3.async函数返回一个 Promise 对象;async函数内部return语句返回的值,会成为then方法回调函数的参数
- 4.await命令
- 5.使用注意
12.Class 的基本语法
- 1.类的由来
*类的数据类型就是函数,类本身就指向构造函数
- 2.constructor()方法
- 3.类的实例
- 4.属性表达式
- 5.Class 表达式
- 6.注意点
- 7.静态方法
- 8.实例属性的新写法
- 9.私有方法和私有属性
13.Class 的继承
- 1.extends关键字
- 2.Object.getPrototypeOf()
- 3.super 关键字
- 4.类的 prototype 属性和__proto__属性
原型链
13. Module 的语法
- 1.ES6 的模块自动采用严格模式
- 2.export 命令
- 3.基本写法
- 4.import