ES6查漏补缺
1. let 和const 命令
区别于var
-
不存在变量提升
-
let 是块级作用域,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响
const命令同样适用 -
let不允许在相同作用域内,重复声明同一个变量
重点: let实际上为 JavaScript 新增了块级作用域,即外层代码块不受内层代码块的影响
- 块级作用域内部,优先使用函数表达式
- const声明一个只读的常量。一旦声明,常量的值就不能改变;const一旦声明变量,就必须立即初始化,不能留到以后赋值,只声明不赋值,就会报错。
ES5 只有两种声明变量的方法:var命令和function命令。
ES6 除了添加let和const命令,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。
- var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
2. 数组的解构赋值
从数组和对象中提取值,对变量进行赋值,这被称为解构
- 只要等号两边的模式相同,左边的变量就会被赋予对应的值
- 不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组
- 解构赋值允许指定默认值
对象的解构赋值
- 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值
- 解构后重命名 XXX:XX
- 对象的解构也可以指定默认值
- 如果要将一个已经声明的变量用于解构赋值,必须非常小心
上面代码将整个解构赋值语句,放在一个圆括号里面,就可以正确执行
字符串的解构赋值
-
字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象
-
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值
变量的解构赋值用途
-
交换变量的值
-
从函数返回多个值
-
函数参数的定义,解构赋值可以方便地将一组参数与变量名对应起来
3.模板字符串
`xxx ${变量} xxxx`
4. 字符串新增的方法
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
这三个方法都支持第二个参数,表示开始搜索的位置
使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。
- repeat方法返回一个新字符串,表示将原字符串重复n次
- replaceAll()方法,可以一次性替换所有匹配,返回一个新字符串,不会改变原字符串
5. 数值的扩展
-
ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法
-
数值分隔符
数值使用下划线(_)作为分隔符,可以每三位添加一个分隔符,也可以每一位、每两位、每四位添加一个
不能放在数值的最前面(leading)或最后面(trailing)。
不能两个或两个以上的分隔符连在一起。
小数点的前后不能有分隔符。
科学计数法里面,表示指数的e或E前后不能有分隔符。
-
Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity
-
Number.isNaN()用来检查一个值是否为NaN
-
ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变
-
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用
Math.trunc方法用于去除一个数的小数部分,返回整数部分;对于非数值,Math.trunc内部使用Number方法将其先转为数值;对于空值和无法截取整数的值,返回NaN
Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
- ES2020 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
6. 函数的扩展
- ES6 允许为函数的参数设置默认值,即直接写在参数定义的后
注意点:
参数变量是默认声明的,所以不能用let或const再次声明,会报错
使用参数默认值时,函数不能有同名参数
有默认值的参数,写在最后
- 函数的 length 属性
指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。也就是说,指