1.var 和 let const的区别:
var:声明会成为全局作用域或函数作用域头部,并且会存在变量提升现象,即先使用后声明,值为undefined;
let:声明仅在块级作用域内部有效,在一个作用域内仅能声明一次相同的参数,不存在变量提升的现象,在声明之前使用都是暂时性死区范围,typeof
运算符使用会报错抛出一个ReferenceError
。在ES5中规定块级作用域不能声明函数,但是浏览器厂商没有遵守,到了ES6明确规定了块级作用域可以声明函数,但是不可在作用域之外被调用。
const:设置一个静态的常量,这个常量为只读模式,重新定义const所声明的参数会引起报错,并且const声明的时候就要初始化赋值不然也会报错。const也是块级作用域,不存在变量提升,不能在块级作用域之外引用。
2. [...]运算符
2.1:函数的调用:(...function)的方式,运算符将一个数组,变为参数序列;和函数结合使用:var args = [0, 1],f(-1, ...args, 2, ...[3]);
2.2:数组合并:newArr = [20,...arr1,...arr2]; ,此举会将运算符后的数组合并成一个新的数组返回。
2.3:代替apply方法: ES5 的写法: function f(x, y, z) { // ... }
var args = [0, 1, 2];
f.apply(null, args);
/ES6 的写法:
function f(x, y, z) { // ... }
var args = [0, 1, 2];
f(...args);
2.4:求最大值Math.max()
Math.max(...[14, 3, 77])
2.5:通过push函数,将一个数组添加到另一个数组的尾部
arr1.push(...arr2);
2.6:新建Date类型
new Date(...[2015, 1, 1]);
2.7:将字符串转为真正的数组
[...'hello']
3.变量的解构赋值
ES5为变量赋值只能进行对应单一变量赋值,let x = 1;而ES6可以进行模式匹配进行赋值,赋值号两边只要相等,左边的变量就会被赋予对应的值,
完全解构即变量左边变量与右边值进行对应变量的解构,而解构匹配不成功,即为解构失败,值为undefined;
还有一种情况为不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组,但是必须保证右边的值必须是可遍历结构,并且所匹配值是大于当前左边变量的个数;
解构赋值默认值:就是初始状态下左边变量可以设置默认值,但是这个默认值要在右边为undefined的时候才会生效