@ES6相关知识总结
let和const
let
- 用法和var差不多,新增用来定义变量的关键字,但是有些地方不同需要注意
- let不允许重复声明变量,强行声明报错
- let声明变量只能在块级作用域内有效,ES6新增加块级作用域的概念
- let声明变量不能声明和函数形参相同的变量,会报错
- let声明变量不会被提升,所以只能在声明之后才能进行使用,在之前使用会报错
暂时性死区(TDZ):ES6规定,在一个区块中使用let或者const声明变量,那么此区域变成为块级作用域,用这两个关键字声明的变量可视作绑定该区域,不受外部影响,在该变量声明前不能使用。
const
- 此关键字声明一个变量,此变量就会成为一个可读的常量,不能被修改,重新赋值会报错
- const声明的变量必须一开始就赋值,不能留到后面再赋值
- 为了区别常量和变量,常量一般写为全部大写
- 从本质上面看,const关键字保证的并不是值不变,而是指向的内存地址不变
箭头函数:定义(形参)=>{函数体}
箭头函数与原生JS函数之间的区别
- 对于this的指向问题:箭头函数中的this不再是指向其函数的调用者,其中this指向和箭头函数定义的位置有关,实际原因是因为箭头函数内部没有自己的this,是继承外面的this,所以在箭头函数中使用this时需要看清楚指向,箭头函数内部的this不可变,不能重新改变指向
- new不能用,箭头函数不能使用new关键字来实例化对象,会报错
- 箭头函数内没有arguments对象,更不可以通过它来访问传入的参数
字符串模板:反引号``+${}
解构赋值:从对象或者数组中提取值,对变量进行赋值。
- 可以简化两个变量交换值
- 可以用于函数参数,让其传入的参数顺序进行变化
Array.from():将含有length属性的对象或类数组转成真正的数组
- Array.from(obj,map函数):第一个参数是要转换的对象,第二个参数是一个函数,类似于map函数(map函数:遍历——操作——返回)
三个点(…)
扩展运算符:把数组和类数组对象展开成一系列用逗号隔开的参数序列
reset运算符:与前者相反,将一系列用逗号隔开的参数序列组合成一个数组
Set和Map
Set:是一个构造函数,用来生成Set数据结构
- 类似于数组,但是成员值都是唯一的,不会出现重复值,初始化Set可以传入一个数组或者类数组对象作为参数,也可以不传
- 经典面试题——一句代码解决数组去重
Set的常用属性和方法
- size:返回成员总数
- add(value):添加某个值,返回Set本身
- delete(value):删除一个值,返回布尔值,表示是否删除成功
- has(value):检测是否为Set中的成员,返回布尔值
- clear():清除所有成员,没有返回值
遍历Set的方法
Map:是一个构造函数,生成Map数据结构,类似于对象,键值对集合,但是键可以是非字符串,初始化Map需要一个二维数组,或者直接初始化空的Map;
var m1 = new Map();
var m2 = new Map([['a', 123]