Fork me on GitHub

ES6总结

ES6新特性

  • let关键字,用于声明只在块级作用域起作用的变量。
  • const,用于声明一个常量。
  • 结构赋值,一种新的变量赋值方式,常用于交换变量值,提取函数返回值,设置默认值。
  • symbol数据类型,用于定义一个独一无二的值。
  • proxy代理,用于编写函数,来拦截目标对象的操作。
  • for…of遍历,可遍历具有iterator 接口的数据结构。
  • Set结构,用于存储不重复成员值的的集合。
  • Map结构,键名可以是任何类型的键值对集合。
  • Promise对象,更合理、规范地处理异步操作。
  • Class类定义类和更简便地实现类的继承。

关于Set结构

1
2
3
4
let s=new Set( );
s.add([1]);
s.add([1]);
console.log(s.size); //2

Set结构不会存储相同的值,但这个例子中,2个数组[1]并不是同一个值,存储在不同的内存中,因此并不是相同的值。

关于Map结构

1
2
3
4
5
let map = new Map( );
map.set([1],"ES6");
let con = map.get([1]);
console.log(con); //undefined

2个数组并不是同一个数组,只不过数值都是1。可通过以下代码实现。

1
2
3
4
5
6
let map = new Map( );
let arr = [1];
map.set(arr,"ES6");
let con = map.get(arr);
console.log(con); //ES6

全新数据类型symbol

终于,JavaScript有了第七种数据类型:Symbol,创建一个独一无二的值;它用于对象的属性,设计初衷是为了避免对象属性冲突的问题。要获取对象symbol类型的属性,要用Object.getOwnPropertySymbols( );还提供了Symbol.for( )和Symbol.keyFor( )方法用于搜索对应的symbol值。

  1. 当symbol的值作为对象的属性名时,无法用点运算符获取对应的值,如:
1
2
3
4
5
6
7
8
let name = Symbol();
let person = {
[name]:"张三"
};
console.log(person[name]);
//结果:张三
console.log(person.name);
//结果:undefined
  1. 当symbol类型的值作为对象的属性名时,要用【】,不能用点运算符,如:
1
2
3
4
5
6
let name = Symbol();
let person = {};
person.name = "张三";
person[name]; //结果:undefined
person['name']; //结果:张三
person.name; //结果:张三

symbol.for()函数

作用:根据参数名,去全局环境中搜索是否有以该参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。

1
2
3
let n1 = Symbol.for('name');
let n2 = Symbol.for('name');
console.log(n1 === n2); //true

Symbol.keyFor( )函数

作用:返回一个以被登记在全局环境中的symbol值的key,没有就返回undefined。总而言之一句话:symbol值是被Symbol.for( )创建的,不是被Symbol( )创建的。

关于symbol,还得再唠叨2句,不然记不住

  1. Symbol()创建symbol值不会被登记在全局环境中供Symbol.for()和Symbol.keyFor()搜索;
  2. 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能够遍历不同的数据结构。

据说帅的人都赏给博主几块钱零花钱。