ESModule
JS
模块化解决方案
1.CommonJS
规范:JS
模块的加载方案,一般用在服务端 -- Node.js
--运行时加载
2.AMD
、CMD
:JS模块的加载方案,异步加载,一般是用在客户端 -- require.js
、sea.js
3.ES6
模块化,模块加载方式,既可用在服务端也可用在客户端 -- 编译时加载
4.模块:一个文件就是一个模块
ES6
模块化
1.export
命令: 规定模块的对外接口 -- 文件内的方法对外暴露的名字
1.单个对外暴露接口 export var varNAme val; export function foo(){}; 2.对外暴露多个接口 export {name1,name2 as name3}; //as:name2取个别名 注意:export对外到处必须同时导出变量名和值
2.import
命令:加载模块及对应的接口
import {name1,name2 as name3} from "path/*.js" 注意:1.导入的接口名必须与导出的接口名一一对应 2.文件加载的路劲可以是绝对路劲,也可以是相对路劲 -- 相对路劲必须以/,./,../开头,如果都没有则需要配置文件 3.多个相同的import只会执行一次
3.全部加载
import * as name from "path/*.js";
4.默认导出
export default val / function / class; 注意:1.一个模块只能有一个默认导出 2.default相当于是默认导出的变量名,所以default后直接跟值即可
5.默认导入:
import name from "path/*.js" 注意:name就是默认导出的接口名字
Symbol
1.新的原始数据类型,表示独一无二的值
2.声明:
//1.声明不重复的symbol let s = Symbol(); //不带描述的symbol let s = Symbol("description"); //带描述的symbol //2.声明可重复的symbol let s = Symbol.for(key); //key会注册成全局的值,当再次声明时,会全局查找是否已经存在相同的key,如果存在就应用之前的值;不存在则重新生成
3.作用:给对象添加独一无二的属性 -- 对象的属性名:1.字符串 2.Symbol
4.获取Symbol
属性:Object.getOwnPropertySymbols()
5.获取描述:s.description
6.获取Symbol
声明时的key
:Symbol.keyFor()
Set和WeakSet
Set
1.定义:新的数据结构,类似数组,但是值是唯一的
2.声明:
1.声明一个空的set,然后追加数据 var s = new Set(); 2.声明一个带数据的set var s = new Set(arg); //arg必须具备遍历器接口
3.实例属性:size
:获取元素个数
4.实例方法:1.add()
:添加元素,并返回结构本身 -- 链式调用
2.delete()
:删除某个元素,返回布尔值
3.clear()
:清除所有成员,没有返回值
4.has()
:判断某个元素是否存在
5.遍历方法:1.keys(),values(),entries()
:通过for...of
循环
2.forEach()
3.for...of
:Set
结构本身具备遍历器接口 -- 间接使用数组方法
6.应用:1.数组去重
2.字符串去重
WeakSet
1.类似Set
,值只能是对象,对象都是弱引用(其他地方不再引用对象,则该对象从结构中消失)
2.声明:
//声明一个空的WeakSet let s = new WeakSet(); //声明一个带有值的WeakSet -- 参数必须具备遍历器接口,并且值是对象 let s = new WeakSet([[],[]...]); let s = new WeakSet([{},{}...]);
3.方法:add()
,delete()
,has()
4.作用:用于存放临时对象`
Map
1.数据结构,类似Object
,键可以是任意类型(对象的键只能是String
)
注意:当键为对象时,保存的是对象的引用
2.声明:
1.声明一个空的Map let m = new Map; 2.声明一个带有属性的Map let m = new Map(arg); //参数是一个具备遍历器接口并且值为双元素的数据 -- 参数是值为双元素的具备遍历器接口的数据
3.属性:size
:获取成员个数
4.方法:set(key,val)
:设置成员并返回Map
结构
get(key)
:获取key
对应的值
has(key)
:返回键是否在当前Map
中
delete(key)
:删除某个键,返回布尔值
clear()
:清空Map
5.遍历:1.keys()
,values()
,entries()
:通过for...of
遍历
2.forEach
3.for...of
:本身具备遍历器接口
6.与其他结构数据转换
1.Map转数组:let arr = [...map] 2.数组转Map:let map = new Map([[k,v],[k2,v2]...]) 3.Map转对象:遍历map,将map的键值依次添加到对象中 4.对象转Map:1.let map = new Map(Object.entries(obj)); 2.遍历对象,然后依次添加到map 5.Map转JSON:1.Map的键全为字符串:转成对象形式的json 2.Map的键包含对象:转成键值双元素的数组 6.JSON转Map:1.JSON为对象形式:JSON->对象->Map 2.JSON为数组形式:JSON->数组->Map
WeakMap
1.与Map
类似,保存键值对的集合
2.区别:1.只接收对象作为键名 -- 除null
以外
2.键名对象的引用为弱引用 -- 其他地方对键名对象的引用消失,那么WeakMap
键对应的值也会消失
3.声明:
var wm = new WeakMap() var wm = new WeakMap([ [{x:1},1] ])
4.方法:set()
,get()
,has()
,delete()
5.注意:属性名(对象)的引用为弱引用