ES6语法出来好几年了,项目中偶尔会用到es6写法,整理下个人觉得比较常用的几个语法:
一,变量声明:var ,let , const 的区别:
-
不存在变量提升
- var 命令会发生
变量提升
现象,即变量可以在声明之前使用,值为undefined
。 - let 和 const 则没有变量声明提升的功能,必须要先声明才能使用
- var 命令会发生
-
不允许重复声明
- var命令能重复声明,后者覆盖前者
- let 和 const不允许在相同作用域内,重复声明同一个变量
-
作用域
- var 的作用域是以函数为界限
- let 和 const 的作用域是块作用域,块级作用域指
{ }
内的范围 - var 可以定义全局变量和局部变量,let 和 const 只能定义局部变量
- const 的声明的常量不能被修改,但对于引用类型来说,堆内存中的值是可以被改变的。
-
变量作为全局属性
- 定义的变量会作为window对象的属性,let不会
二、箭头函数 :箭头函数相当于匿名函数,并且简化了函数定义。
ES6 中函数式声明方式被箭头函数 => 取代
箭头函数:使用 => 定义函数
- 当函数没有参数时,()不能省略
- 当函数只有一个参数,且函数体是一句代码,且是返回语句
参数的()可省略、函数体 {} 可省略、return 可省略、
中间使用 => 连接 - 若函数体只有一句,且不是return 语句, 不能省略 {}
- 若函数体有多条语句,不能省略 {}
- 若函数有多个参数,不能省略()
- 若函数的返回值为对象,此时不能省略return。
如果是单表达式要返回自定义对象,不写括号会报错,因为和函数体的{ ... }有语法冲突。
注意,用小括号包含大括号则是对象的定义,而非函数主体。
使用箭头函数注意
- 箭头函数不适用于声明函数
- 箭头函数不适用于DOM事件
- 箭头函数不能作为构造函数(迭代器)
- 箭头函数内不能使用arguments
- 不能使用yield命令
三、ES6模板字符串:模板字符串 反引号 ``
1.支持换行 //空白会打印出来
2.模板中传变量 ${变量}
四、ES6 新增字符串方法
五、ES6 Promise 解决回调
promise:为了解决异步编程中的回调而产生
Promise的实例需要接收一个函数作为参数
该函数又需要接收两个函数数作为参数
resolve 函数
reject 函数
then方法
参数一:是resolve函数的实现
参数二:是reject函数的实现
then方法返回值的是一个新的Promise实例
注意,不是原来那个Promise实例
若前一个回调函数返回的是一个Promise对象(即有异步操作)时,
后一个回调函数,会等待该Promise对象的状态发生变化,才会被调用。
promise的异常处理
- 建议总是使用catch方法。
- Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。
- Promise 的状态一旦改变,就永久保持该状态,不会再变了。
- catch方法返回的还是一个 Promise 对象
- catch和reject同时出现时,只执行reject
六、ES6语法 Grunt 编译时不支持。
即:grunt buile时,es6语法编译时会报错。