1、模块
导出
导出默认:
function format(date){ }
exprot default format
export default function format(date){ }
导出:
export function reverse(){}
先声明再导出:
export const PRICE = 500;
var name="mumu",
function say(){
console.log("我的价格是:"+PRICE)
}
export {name,say}
导入
<script type="modlue"></script>
导入默认:
import {reverse} from './相对路径'
//reverse要和源文件方法一致
导入别名:
import {reverse as r} from './相对路径'
默认和普通方法是一个文件:
import format,{reverse as r,PRISE} from './相对路径'
导入所有:
import * as utils from './相对路径'
utils.reverse()
默认导出方法访问
utils.default()
ES6新增数据类型
- set集合 不重复的数组
- add 添加
- delete删除
- clear清空
- size大小
- has检测
- [..new Set(arr)]去重
- map图 建名可以使任何类型的对象
- set(key,value)设置
- get(key)获取
- delete删除
- clear清空
- size大小
- symbol符号 唯一的符号(对象的键)
- weekSet 值是引用类型
- weekMap 键是引用类型
迭代类型
可以for of 遍历的对象都是可迭代对象,如:String字符串 Array数组 Set集合 Map图
- for(let v of myset)
- for(let k of myArr.keys())
- for(let v of myArr.values())
- for(let[k,v] of myArr.entries())
Promise承诺
var p = new Promise((resolve,reject)=>{
//异步操作
resolve(data);
reject(err);
})
有三个状态(状态变化不可逆):
- pendding
- resolved
- rejected
实例
.then(res=>{}) 回调函数获取resolved返回的结果 返回一个新的promise实例
.catch(err=>{}) 获取rejected的原因
解决
1.异步操作
2.回调地狱(层级过深)
all全部
所有promise都resolve,all才执行
race 赛跑
返回最想resolve结果
同步和异步
同步:是指按顺序从上至下阻塞式执行代码(上一行代码不执行完毕,下一行是不会执行的)
异步:是指先执行主线程的代码,再执行异步调用(非阻塞式)
实现异步的方式
- 回调函数
- 事件响应
- 订阅发布模式
- Promise
- sync 和 await
类
类的本质是函数
类的this指向的是它的实例(也就是new出来的对象)
构造函数
constructor(){}
实例化的时候 new关键字调用的就是构造函数
super()
调用父类的构造函数
extends
继承父类的方法
static
类的静态属性和方法
async与await
async装饰的函数,返回的是一个promise对象;返回的结果是resolved的结果
await用来等待异步的resolve结果 只能出现在async装饰的函数中
function doit(){
var m1=await say("你真好看",2000)
var m2=await say("像春天花一样",3000)
return m1+m2;
}
doit().then(res=>{}).catch(err=>{})
generator生成器
function *range(min,max){
for(var i=min,i<max;i++){
yield i;
}
}
生成器执行的结果是一个迭代器
迭代器通过next方法返回一个对象,对象的value是yield生成的结果 在生成器里面遇到yield就会停止等待下一次next调用
{value:1,done:false}
...
{value:undefined,done:true}
可以通过for来遍历迭代器
for(v of range(1,100)){
console.log(v)
}
String,Array,Set,Map的迭代器
arr[Symbol.iterator]()
Object.defineProperty
Object.defineProperty(obj,props,{
set(v){//设置},
get(){//获取},
configurable:true 是否能删除
enumerable:true, 是否可以枚举
value 默认值
writanle:true 是否可写
})
可以定义对象的某个属性
proxy代理对象
target目标对象
handle 处理器
get(target,property){
//拦截set
return target[property]
}
set(target,property,value){
//拦截set
}
生成代理对象proxy
var proxy =new Proxy(target,handle)