ES6
- ECMAScript和JavaScript
- ECMA是标准,JS是实现。
- ECMAScript简称ECMS或者ES
- 类似于HTML5是标准,IE10、Chrome、FireFox都是实现
- 低级浏览器主要支持 ES3.1
- 高级浏览器正在从 ES5 过渡到ES6
1、Let和Const
- let用来声明变量:
- 不存在变量提升
- 存在暂时性死区,ReferenceError
- 不允许重复声明
- const用来声明常量:
- 一旦声明必须初始化,常量的值不能改变。
- 只在声明的块级作用域内有效
- 不会提升,存在暂时性死区,先声明再使用
- 不可重复声明。
- const本质:并不是变量的值不能改变,而是变量指向的那个内存地址不得改动。
2、块级作用域
- 为什么需要块级作用域?
- 内层变量可能会覆盖外层变量
- 用来计数的循环变量泄露为全局变量。
- 块级作用域中函数声明规则:
- 允许在块级作用域中声明函数
- 函数声明类似于var,即会提升全局作用域或函数作用域的头部。
- 函数声明还会提升到块级作用域的头部。
3、箭头函数
- 箭头函数this的指向是固定化的,这非常有利于封装回调函数。箭头函数没有自己的this,导致内部函数的this就是外层代码块的this,正因为它没有this,所以不能作为构造函数(不能使用new命令)。
- 箭头函数的this的值和函数外面的this的值是一样的。
- 特点:箭头函数中的this始终指向箭头函数定义时的离this最近的一个函数,如果没有最近的函数就指向window。
4、Promise
- Promise是异步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
- 它有三种状态:pending-进行中 、 resolved-已完成、rejected-已失败
- Promise构造函数包含一个参数和一个带有resolve(解析)和reject(拒绝两个参数的回调)。在回调中执行一些操作(例如异步),如果一切都正常,则调用resolve,否则调用reject。
- 对于已经实例过的promise对象可以调用promise.then()方法,传递resolve和reject方法作为回调。then()方法接收两个参数:onResolve和onReject,分别代表当前promise对象在成功或失败时。
5、for...of循环
var arr=["a","b","c"];
for(var v of arr){
console.log(v);
}
//输出:
//a
//b
//c
6、解构赋值
- 数组解构赋值:数字中的值会自动被解析到对应接收该值得变量中,数组的解构赋值要一一对应,如果有对应不上的就是undefined
var [name , pwd, sex ]=["小周","123456","男"];
consele.log(name) //小周
console.log(pwd) //123456
console.log(sex) //男
- 对象的解构赋值
- 对象的解构赋值与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
7、模板字符串
用一对反引号 标识,它可以当做普通字符串使用,也可以用来定义多行字符串,也可以在字符串中嵌入变量,js表达式或函数,变量、js表达式或函数需要写在 ${} 中。