ES6
变量
let 不能重复声明、块级作用域、可变
const 不能重复声明、块级作用域、不可变
箭头函数
()=>{}
// 如果有且仅有一个参数()可以省略
// 如果有且仅有return { } 可以省略
eg:
(a)=>{return a*2} 可简写为 a=>a*2
函数参数
剩余参数(rest parameter)
function fun(a, b, ...args) {
// args为数组名随便取,接收剩余参数,必须在末尾
}
除接受剩余参数外…args还可以用于展开数组
args=[1,2,3];
console.log(...args); // ...args为1,2,3
默认参数
function fun(a, b=2) {
// b有默认参数2
}
解构赋值(destrucuring declaration)
- 赋值语句左右数据结构一样即可
- 声明和赋值不能分开写
// 解构赋值
let [a, b, c] = [1, 2, 3] // 数组
let {a, b, c} = {a:1, b:2, c:3} // json
数组
map(function) 映射 1V1
arr.map(item=>item*2) // 此处function为箭头函数(item)=>{return item*2}的简写
reduce(tmp, item, index) 汇总 nV1
tmp: 初始为arr[0],之后是上一次的return值; item:当前位arr值(从arr[1]开始),index:当前item的index
filter(function) 过滤器
通过function return boolean,function中就可以写一些过滤条件,boolean值为true时保留当前值,最终输出所有保留值数组
forEach(function) 循环/迭代
字符串
新增方法
str.startsWith(subStr)
str.endsWith(subStr)
字符串模板(返单引号``)
1 直接把各种符号包括各种空白(space、tab、enter)加到字符串,不需转义
2 直接 ${把变量之类的加进去}
a = "pig";
b = `<div>dlf is ${a}</div>`
console.log(b)
面向对象
类
多了class关键字
有了专门的构造器constructor,类和构造器分开了
方法不再用prototype外加
旧
新
继承
新增extends、super
旧
新
Json
JSON的标准写法:1 只能用双引号;2 所有key都必须用引号包起来
JSON对象(es5.1就有了)
JSON.stringify(json) json转字符串
JSON.parse(str) 字符串转json,字符串本身必须符合json的标准写法
简写:1 key和value一样时可以只写key;2 json中的function可以直接写fun(){},不用再fun: function(){}
Promise
Promise.then(fun1对应resolve, fun2对应reject)
Promise.all([pro1, pro2, ...])
Promise.race([pro1, pro2, ...]) // 发送n个请求,只取最先返回的一个
generator
generator函数,整个函数被yield语句分成n段/n个小函数,调用时不会直接执行而是生成generator对象,调一次next()执行一段
function *fun() { // 此处的fun只能是普通函数,不能是箭头函数)
yield;
}
yield 传参、返回
yield可以接收next传的参数并返回,参数也可以直接跟在yield后
let 下一段函数的输入 = yield 这一段函数的输出;
generator实例-runner
ES7
数组
includes
keys、values、entries(key-value对)
for … of 循环迭代器–数组value
for … in 循环key–数组index
幂
旧 Math.pow()
新 **
字符串
padStart(位数, 补位符-默认为space) // 格式化位数,不够左边补
padEnd(位数, 补位符-默认为space) // 格式化位数,不够右边补
async await
替代了 generator yield
- 不再依赖于外部的runner
- 可以用箭头函数了