ES6的MAP 和 TS的eumn 和 Object区别及使用

68 阅读2分钟

ES6的MAP 和 TS的eumn 和 Object区别及使用

map基础用法设置,获取,遍历

const mapObj = new Map([[1,'red'],['name','张三']]) // 二维数组
mapObj.set(2,'yellow') //可以通过set添加元素
mapObj.get(2) //yellow

----遍历---
mapObj.keys() // 1, 'name', 2

----Map转数组---
[...mapObj] // [[1,'red'],['name','张三'],[2,'yellow']]

---数组转Map
let arr = [[1,'red'],['name','张三'],[2,'yellow']]
new Map(arr)

Map和对象互相转换,MapJson互相转换详见官网

map自带的方法

  • mapObj.set() 添加一个新建元素到映射
  • mapObj.get() 返回映射中指定的元素
  • mapObj.has() 如果映射包含指定元素,则返回true
  • mapObj.clear() 从映射中移除所有元素
  • mapObj.delete() 从映射中移除指定元素
  • mapObj.toString() 返回映射字符串形式
  • mapObj.valueOf() 返回指定对象的原始值
  • mapObj.keys():返回键名的遍历器。
  • mapObj.values():返回键值的遍历器。
  • mapObj.entries():返回所有成员的遍历器。
  • mapObj.forEach():遍历 Map 的所有成员。

参考文档:www.bookstack.cn/read/es6-3r…

enum的简单实用-设置,取值

------定义------
const enum STATUS {
    1 = '登录',
    2 = '注册'
} // 当前为字符串枚举
-----使用----
STATUS[1] // 登录
STATUS['登录'] // 1 可以反向映射到属性
项目中建议使用中文的字符串枚举。

参考地址:www.tslang.cn/docs/handbo…

object对象

const status = {
    '1' : '登录',
    '2' : '注册'
}
status['1'] // '登录'

map,object,enum的区别,及各自的使用场景

enum对比object:

  1. object灵活性较差,只能通过属性获取值,枚举可以双向获取(反向映射-通过值找到对应的属性)
  2. 枚举类型定义之后,不可以被修改
  3. eumn编译之后是个对象

map对比object

  1. Object的键只能是字符串或者Symbol,Map的键值可以是任意值
  2. Map的键值对数量可以通过size属性获取,Object则需要通过Object.keys(obj).length类似的方式获取
  3. Map的键值是有序的,数据的排序是根据用户push的顺序进行排序的, 而Object实例中key,value的顺序就是有些规律了, (他们会先排数字开头key值,然后才是字符串开头key值);