编辑于2018年1月6日
一、let命令
1、let声明的变量只在其所在代码块内有效;
2、let声明的变量在声明前使用会报错ReferenceError;
3、暂时性死区;
4、let不允许在相同的作用域内重复声明同一个变量。
二、块级作用域
1、let外层代码块不受内层代码块的影响;
2、使用do表达式使块级作用域中的值能够返回。
三、const
1、const声明一个只读常量;
四、ES6中全局变量将逐步与顶层对象的属性隔离
五、变量的解构赋值
1、解构不成功,变量的值就等于undefined;
2、解构赋值允许指定默认值;
3、解构也可用于对象;
4、字符串的解构赋值:const[a,b,c,d,e]="hello";
5、数值和布尔值也可使用解构赋值;
6、函数的参数也可以使用解构赋值,函数参数的解构也可以使用默认值;
7、建议在模式中不要放置圆括号;
8、用途:
a、变换变量的值;
b、从函数返回多个值;
c、函数参数的定义;
d、提取JSON数据;
e、函数参数的默认值;
f、遍历Map解构。
四、字符串的扩展
1、字符的Unicode表示法:ES6中只要将码点放入大括号,就能正确解读该字符;
2、'abc'.at(0);//"a" '?'.at(0);//"?"
而ES5中'abc'.charAt(0);//"a" '?'.charAt(0);//"\uD842"
3、常见方法
a、includes()、startsWith()、endsWith()
b、repeat()
c、padStart()、padEnd()//ES2017引入了字符串补全长度功能,'x'.padStart(4,'ab');//'abax'
4、模板字符串。
七、函数的拓展
1、函数的默认值;
2、应用:
function throwIfMissing(){
throw new Error('Missing parameter');
}
function foo(mustBeProvided = throwIfMissing()){
return mustBeProvided;
}
foo;//Error:Missing parameter
3、ES6引入了reset参数(形式为“...变量名”);
4、name属性:ES6的name属性会返回实际的函数名;
5、箭头函数;
6、函数绑定运算符是并排的双冒号(::),双冒号左边是一个对象,右边是一个函数;
7、尾调用优化。
八、数组的拓展
1、扩展运算符(spread)是三个点(...),他如同reset参数的逆运算;
2、Arrayfrom():将两类对象转为真正的数组:
a、类似数组的对象
b、可遍历对象
3、Arrayof()方法用于将一组值转换为数组;
4、copyWithin();
5、find()和findIndex();
6、fill()方法使用给定值填充一个数组;
7、entries()、keys()、values();
8、includes()。
十二、Proxy
函数Proxy接受两个参数,第一个参数是所要代理的目标对象,即如果没有Proxy介入,操作原来要访问的就是这个对象;第二个参数是一个配置对象,对于每一个被代理的操作,需要提供一个对应的处理函数,该函数将拦截对应的操作。
十四、Promise对象
1、两个特点:
a、对象的状态不受外界影响,三种状态:Pending(进行中)、Fulfilled(已成功)、Rejected(已失败);
b、一旦状态改变就不会再变
2、Promise.prototype.then()
Promise.prototype.catch();
3、Promise.all()
Promise.race();
4、Promise.resolve()
Promise.reject();
5、done()
finally()。
十五、Iterator和for...of循环
1、集中遍历:
a、for;
b、forEach;
c、for...in;
d、for...of。
十九、class的基本语法:ES6中的class可以看作只是一个语法糖。
二十一、修饰器
1、修饰器本质就是编译时执行的函数;
2、修饰器只能用于类和类的方法。
二十二、Module的语法
1、ES6模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入;
2、ES6的模块自动采用严格模式,不管有没有在模块头部加上"use strict"。
二十四、编程风格
1、ESLint的使用(语法规则和代码风格的检查工具)。