支持的:IE10+ 、Chrome、FireFox、移动端、NodeJS
如何处理兼容:
var :存在变量提升,可以重复声明
优点:不会变量提升, 在块级作用域内有效, 形成暂时性死区(在代码块内,使用let
命令声明变量之前,该变量不可用的,使用会出错)
const 是常量,不能修改
定义变量:
ES5 :var命令,function 命令。
ES6:除了var 命令,function 命令,新增了let 、const、
import
、class
。
解构赋值:从数组或对象中提取值,对变量进行赋值。
let [x,y] = [10,20]
let [x,,y] = [10,20,30]
注意:左右两边结构必须一样,初始化同时并赋值。
箭头函数:
//一般函数
window.onload = function (x,y) {
....
}
//箭头函数 去除function ,在()与{}之间插入=>
winddow.onload = (x,y) => { ... }
()
可以省略return
,{ }
可以省略//不确定参数个数时,使用 ...点表示剩余参数
function args(x,y, ...lastArgs) {
......
}
// ... 还可以表示数组所有元素
let arr1 = [10,20,30]
let arr = [1,2,...arr1] //结果:[1, 2, 10, 20, 30]
由于异步任务获得数据只能通过回调函数 ,回调函数里面嵌套回调函数,多层回调函数嵌套即形成"回调地狱"。
为了避免出现回调地狱,ES6中引入了一个API Promise(承诺)是一个构造函数。 Promise相当于一个容器,里面存放一个异步任务,默认异步任务有三种状态:
初始 peding ——> 成功 resolve
——>失败 reject
只能从初始到这两个状态,不能转换
1.创建promise容器。Promise一旦创建,就开始执行。(Promise 本身不是异步的,里面的异步任务是)
var fs = require("fs")
var fs = require("fs")
var p1= new Promise( function (resolve ,reject) {
fs.readFile('./db.json','utf-8' ,function (err ,data) {
//异步任务失败,将容器的peddling状态改为reject状态
if (err) {
reject(err)
//异步任务成功,将peddling状态改为resolve
}else {
resolve(data)
}
})
})
var p2= new Promise( function (resolve ,reject) {
fs.readFile('./db2.json','utf-8' ,function (err ,data) {
//异步任务失败,将容器的peddling状态改为reject状态
if (err) {
reject(err)
//异步任务成功,将peddling状态改为resolve
}else {
resolve(data)
}
})
})
var p3= new Promise( function (resolve ,reject) {
fs.readFile('./db3.json','utf-8' ,function (err ,data) {
//异步任务失败,将容器的peddling状态改为reject状态
if (err) {
reject(err)
//异步任务成功,将peddling状态改为resolve
}else {
resolve(data)
}
})
})
p1
.then(function (data) {
//成功的resolve函数。
//return 一个promise对象时,后面then中方法的第一个参数也是resolve
return p2
},function (err) {
//失败的reject函数
})
.then( function(data) {
return p3
})
.then( function (data) {
console.log(data)
})