ES6的特性
- 变量
- 函数
- 数组
- 字符串
- 面向对象
- Promise
- generator
- 模块化
变量
var
- 可以重复声明
- 无法限制修改
- 没有块级作用域 函数级
let
- 不能重复声明
- 变量 可以修改
- 有块级作用域
const
- 不能重复声明
- 常量 不可以修改
- 有块级作用域
函数
剪头函数
- 如果只一个参数,() 可以省略
- 如果只有一个return ,{} 可以省略
函数的参数
- 参数的展开/扩展
- 收集剩余的参数 ...args ( Rest Parameter 必须是最后一个)
function show(a, b, ...args) {}
- 收集剩余的参数 ...args ( Rest Parameter 必须是最后一个)
- 默认参数
解构赋值
- 左右两边结构必须一样
- 右边必须是个东西
- 声明和赋值不能分开(必须在一句话里完成)
let [a, b, c] = [1, 2, 3] let {q, w, r} = {q: 23, w: 34, r: 45}
数组
- map 映射
let arr = [1, 3, 4, 5] let result = arr.map(function (item) { return item }) console.log( result ) //[1, 3, 4, 5] - reduce 汇总
let arr = [ 45, 65, 76, 345, 676 ] let result = arr.reduce( function (tmp, item, index) { // console.log(tmp, item, index) return tmp+item }) console.log(result) //1207 - filter 过滤器
let arr = [ 445, 565, 23, 563, 46, 4 ] let result = arr.filter (item => { return item%4 == 0 }) console.log(result) // [4] - forEach 循环(迭代)
let arr = [23, 45, 65, 90] arr.forEach(item => { console.log(item) // 23, 45, 65, 90 })
字符串
多两个新方法
- startsWith 以什么开头
- endsWith 以什么结尾
字符串模版
面向对象
- class关键字、构造器和类分开了
- class 里面直接加方法
class User{
constructor(name, pass) {
this.name = name
this.pass = pass
}
showName () {
console.log(this.name)
}
showPass () {
console.log(this.pass)
}
}
var u1 = new User('Li Miss', '123')
u1.showName()
u1.showPass()
- 继承:
class User{
constructor(name, pass) {
this.name = name
this.pass = pass
}
showName () {
console.log(this.name)
}
showPass () {
console.log(this.pass)
}
}
class VipUser extends User{
constructor(name, pass, level) {
super(name, pass)
this.level = level
}
showLevel() {
console.log(this.level)
}
}
var user4 = new VipUser('Zhang Miss', '345', 89)
user4.showName()
user4.showPass()
user4.showLevel()
- 面向对象应用 — react
- 组件化 — calss
- JSX
- json
- JSON.stringify
- JSON.parse
Promise
- 异步:操作之间没关系,同时进行多个操作
- 同步:同时只能做一件事
- Promise.all
- Promise.race
Promise.all([
$.ajax({url: 'data/arr.txt', dataType: 'json'}),
$.ajax({url: 'data/json.txt', dataType: 'json'}),
$.ajax({url: 'data/num.txt', dataType: 'json'})
]),then(result => {
let [arr, json, num ] = result // 解构赋值
console.log('成功了')
},
err => {
alert('失败了')
}
)
generator
- 普通函数 - 一路到底
- generator - 可以暂停
function * show (){
console.log('1')
yield
console.log('2')
}
// show() // 不会执行里面的代码,是创建一个 generator对象
let genObj = show()
genObj.next() // next执行下一步 1
genObj.next() // 2
}
yield
- 传参
function * show (num1, num2 ) {
// console.log(num1, num2) // 23 45
console.log('1')
let a = yield
console.log('2')
console.log(a)
}
let gen = show(23, 45)
gen.next(12) // 1 没法将参数 12 传给 yield
gen.next(34) // 2 34
- 返回
function * show () {
console.log('1')
yield 'a'
console.log('2')
return
}
let gen = show()
let bz1 = gen.next()
let bz2 = gen.next()
console.log(bz1) // 1 {value: "a", done: false}
console.log(bz2) // 2 {value: undefined, done: true}
异步操作
- 回调
- promise
- generator