ES6相较于过去的版本进行了重大的改革,可以说是ESMAScript中的里程碑,所以对于ES6基础特性的了学习不仅能狗让我们更好的进行编程规范,也能应付一些工作上的笔试和面试。
一、let
- 变量不能重复声明
- 块级作用域,全局,函数,eval
- 不存在变量提升
二、箭头函数的特性
- this是静态的,this始终指向函数声明时所在作用域下this的值
- 不能作为构造实例化对象
- 不能使用 arguments 变量
- 箭头函数适合与this无关的问题:定时器,数组的方法回调;不适合与this有关的问题:事件回调,对象的方法
三、函数参数默认值的设置
- 形参初始值 具有默认值的参数,一般位置靠后(潜规则)
- 默认值与解构赋值结合使用
四、rest参数
rest 参数用于获取函数的实参,用来代替 arguments
提高了对参数使用的灵活程度
function date(...args){
console.log(args);//filter some every map
}
date('aaa','bbb','ccc');//得到一个数组
rest参数必须要放到参数最后(使用限制)
function fn(a,b,...args)
五、扩展运算符
… 扩展运算符能将数组转换为逗号分隔的参数序列
- 数组的合并 (相当于concat()的功能)
- 数组的克隆
- 将伪数组转为真正的数组
六、Symbol
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。
Symbol 特点
- Symbol 的值是唯一的,用来解决命名冲突的问题
- Symbol 值不能与其他数据进行运算
- Symbol 定义的对象属性不能使用 for…in 循 环遍 历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名
//创建 Symbol
//通过一个函数调用来创建
let s1 = Symbol();
console.log(s1, typeof s1); //=> symbol() "symbol"
//添加标识的 Symbol
let s2 = Symbol('aaa');
let s2_2 = Symbol('aaa');
console.log(s2 === s2_2); // =>false
//Symbol.for 创建
let s3 = Symbol.for('aaa');
let s3_2 = Symbol.for('aaa'); // =>true
注: 遇到唯一性的场景时要想到 Symbol
附:七种数据类型: USONB you are so niubility
七、迭代器
遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口(指的是对象里的一种属性),就可以完成遍历操作。
- ES6 创造了一种新的遍历命令 for…of 循环,Iterator 接口主要供 for…of 消费
- 原生具备 iterator 接口的数据(可用 for of 遍历)
a) Array
b) Arguments
c) Set
d) Map
e) String
f) TypedArray
g) NodeList - 工作原理
a) 创建一个指针对象,指向当前数据结构的起始位置
b) 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员
c) 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员
d) 每调用 next 方法返回一个包含 value 和 done 属性的对象
注: 需要自定义遍历数据的时候,要想到迭代器