ESModule、Symbol、Set和WeakSet、Map和WeakMap

ESModule

JS模块化解决方案

1.CommonJS规范:JS模块的加载方案,一般用在服务端 -- Node.js --运行时加载

2.AMDCMD:JS模块的加载方案,异步加载,一般是用在客户端 -- require.jssea.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声明时的keySymbol.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...ofSet结构本身具备遍历器接口 -- 间接使用数组方法

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.注意:属性名(对象)的引用为弱引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值