Js Es6 Map对象

Map

Javascript的对象其实是键值对的集合(Hash结构),而键通常只能是 字符串 ,所以在es6中为了解决这个问题,推出了Map(值-值对应)数据结构,一种更完善的Hash结构实现

Api 功能
map.get(key) 获取键为key的value
map.set(key, value) 赋值,返回当前Map对象,所以可以map.set().set()
map.has(key) 是否存在
map.delete(key) 删除
map.size() 成员数
map.cleaer() 清空map

遍历器

iterator 功能
map.keys() 遍历键
map.values() 遍历值
map.entries() 返回成员的遍历器
map.forEach() 遍历所有成员
  • Map的构造函数接受一个课Iterator的值作为参数

    const person = [
      ['name', 'zhangsan', ], ['age', 23],
    ]
    const personMap = new Map(person)
    
    /** 上面的通过构造函数初始化其实是这样实现的 */
    const map = new Map()
    person.forEach(([key, value]) =>map.set(key, value))
    return map // Map { 'name' => 'zhangsan', 'age' => 23 }
    
  • Map的键具有唯一性,如果键重复,前面的键将被后面的覆盖

    const person = [
      ['name', 'zhangsan', ], ['age', 23], ['name', 'lisi'], ['age', 34]
    ]
    
    const personMap = new Map(person) // Map { 'name' => 'lisi', 'age' => 34 }
    
  • Map的键跟内存地址绑定,当键为对象时,只有对同一个键的引用,Map才会将其视为同一个键

    // 先看一个比较熟悉的问题
    let obj1 = ['a1']
    let obj2 = ['a1']
    // 此时修改obj1并不会引起obj2的改变
    
    // 同理
    const map = new Map()
    map.set(['test'], 'test')
    map.get(['test']) // undefined
    
    // 对象作为键时,Map只会将同一个地址的对象视为同一个键
    const obj = ['test']
    map.set(obj, 'test')
    map.get(obj) // test
    
  • 如果是简单类型的值作为键(数字,字符串,boolean,undefined, null,null不等于undefined,NaN,虽然NaN不严格等于自身,但在Map中是同一个键)

    map.set(-0, 123);
    map.get(+0) // 123
    
    map.set(true, 1);
    map.set('true', 2);
    map.get(true) // 1
    
    map.set(undefined, 3);
    map.set(null, 4);
    map.get(undefined) // 3
    
    map.set(NaN, 123);
    map.get(NaN) // 123
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。