ES6新特性
- let关键字,用于声明只在块级作用域起作用的变量。
- const,用于声明一个常量。
- 结构赋值,一种新的变量赋值方式,常用于交换变量值,提取函数返回值,设置默认值。
- symbol数据类型,用于定义一个独一无二的值。
- proxy代理,用于编写函数,来拦截目标对象的操作。
- for…of遍历,可遍历具有iterator 接口的数据结构。
- Set结构,用于存储不重复成员值的的集合。
- Map结构,键名可以是任何类型的键值对集合。
- Promise对象,更合理、规范地处理异步操作。
- Class类定义类和更简便地实现类的继承。
关于Set结构
|
|
Set结构不会存储相同的值,但这个例子中,2个数组[1]并不是同一个值,存储在不同的内存中,因此并不是相同的值。
关于Map结构
|
|
2个数组并不是同一个数组,只不过数值都是1。可通过以下代码实现。
|
|
全新数据类型symbol
终于,JavaScript有了第七种数据类型:Symbol,创建一个独一无二的值;它用于对象的属性,设计初衷是为了避免对象属性冲突的问题。要获取对象symbol类型的属性,要用Object.getOwnPropertySymbols( );还提供了Symbol.for( )和Symbol.keyFor( )方法用于搜索对应的symbol值。
- 当symbol的值作为对象的属性名时,无法用点运算符获取对应的值,如:
|
|
- 当symbol类型的值作为对象的属性名时,要用【】,不能用点运算符,如:
|
|
symbol.for()函数
作用:根据参数名,去全局环境中搜索是否有以该参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。
|
|
Symbol.keyFor( )函数
作用:返回一个以被登记在全局环境中的symbol值的key,没有就返回undefined。总而言之一句话:symbol值是被Symbol.for( )创建的,不是被Symbol( )创建的。
关于symbol,还得再唠叨2句,不然记不住
- Symbol()创建symbol值不会被登记在全局环境中供Symbol.for()和Symbol.keyFor()搜索;
- Symbol.keyFor()函数在全局环境中找不到对应的symbol,就回返回undefined。
ES6的 Iterator 遍历器
- Iterator遍历器的原理:
当可遍历对象被for…of遍历的时候,Symbol.iterator就会被调用,返回一个iterator对象。其中还有一个很重要的方法:next( );
- for…of原理
先调用可遍历对象的Symbol.iterator方法,得到一个iterator遍历器对象,然后就在遍历器上不断调用next( )方法,直到done的值为true的时候,表示遍历结束。
- Iterator遍历器的价值
由于数据结构都实现了Iterator遍历器接口,供for…of遍历,使得for…of能够遍历不同的数据结构。