学习ES6
js语言的下一代标准
let和const,模板字符串,增强函数,扩展功能,解构赋值,symbol,迭代器,promise对象,proxy对象,async,类class,模块化
let和coust
原来用var。let需要先定义再使用,没有变量提升,是一个块作用域{},不能重复声明。
const也是块作用域,声明常量,一旦被声明不允许被修改,如果是对象的话,可以修改对象的属性。
模版字符串
let htmlstr =
你好:${name},欢迎
;
用反引号(tab键上面)包起来,然后用户$占位符显示变量。
函数增强
- 给默认值function(a=10,b=20){} ;然后就可以在调用的地方少传参数;默认值也可以是一个调用函数
- 剩余运算符,不固定的参数长度:functon pick(obj,…keys){}; keys就是一个参数数组。…叫剩余运算符
- 扩展运算符…;调用的时候解包 pick(…arr);
- 箭头函数:(a,b)=> {};如果只有一个参数 val=>{},如果函数体就一个表达式,直接 var=> (val+1) ;箭头函数没有this,arguments。
var foo = 1;
箭头函数没有this,它的this是从外面找的。类的方法的定义不要用箭头函数,不然没this。
解构赋值
针对数组和对象来进行操作;解构赋值是对赋值操作的一种扩展
let node = {
type: 'iden',
name:'foo'
}
let {type,name} = node;//就是把对象里头的属性赋值出来。这个名称必须和对象里面的属性一致。
对象的扩展功能
Object.is(obj1,obj2) 判断两个对象是否相等
Object.assign(obj1,obj2,obj3…) 对象的属性合并到第一个obj并返回
数据类型
1 Symbol 独一无二的,const name = Symbol(‘name’) 不等于const name2 = Symbol(‘name’)
2 Set 集合 无重复值的有序列表 new Set(); add,delete, has
3 Map
数组增强
Array.from(arguments) 将伪数组转成真数组;等价于[…arguments]
Array.of(1,2,3) 合并成一个数组
[1,2,3,7.8.9].copywithin(0,3) 数组内容替换
find(function(){}) 查数据,findIndex 查找第一个符合条件的索引
entries(), keys(),values() ,includes 代替原来的indexOf用于查是否包含
迭代器
迭代器的next方法获取下一个,done判断是否结束
异步的三种增强
生成器generator:用yield挂起,用next走一步。实现一个函数分段阻塞执行。
promise 承诺,三种状态:pending,resolved,rejected;Promise.all[p1,p2,p3],Promise.race[p1,p2] 都执行成功,谁先成功就谁。
async和await。异常rejected用try catch去抓
模块化
引入经历了src,Common.js, AMD;一个文件就是一个模块
export const name = ‘张三’ 这种可以写多个 import {name} from xxx.js
export default xxx ;这种只能写一个 import xxx from xxx.js
import * as f from xxx.js 是把所有的都接收过来;上面两种可以混写import xxx,{name} from xxx.js