JS的一些内置对象(一)

244 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

Map对象

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。

Map和object的不同:

  1. Map在默认情况下不包含任何键值,只包含显示添加的键值。object有一个原型,它的键值会受到原型上的键名影响。
  2. Map的键值可以是任意值,包括函数、对象或任意基本类型。但是object的键值必须是string或symbol。
  3. Map对象可以直接获取到size,而object是不能直接获取到的。
  4. Map是可迭代的,所以它能被直接迭代,即可以使用for...of表达式,object并没有实现迭代协议,所以它不能使用for...of, 可以使用 for...in表达式允许你迭代一个对象的可枚举属性。 注:迭代即迭代协议。迭代协议分为:可迭代协议和迭代器协议。可迭代协议允许 JavaScript 对象定义或定制它们的迭代行为,例如,在一个for..of 结构中,哪些值可以被遍历到。要成为可迭代对象, 一个对象必须实现 @@iterator 方法。这意味着对象(或者它原型链上的某个对象)必须有一个键为@@iterator的属性。

Map对象上的一些方法

  1. set(key,value),在Map对象中设置与指定的键key关联的值value,并返回Map对象。
  2. has(key),判断Map对象上是否存在某个键值,存在返回true,不存在返回false。
  3. get(key),获取Map对象上键值key的值,存在返回value,不存在返回undefined。
  4. delete(key),删除指定的键值对,如果键值存在并成功删除返回true否者返回false
  5. clear(),清除所有的键值对。
const map1 = new Map();
 map1.set('a', 1);
 map1.set('b', 2);
 console.log(map1.size); // 2
 for(let e of map1){
   console.log(e); // ['a',1],['b',2]
 }

WeakMap对象

WeakMap对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

Map和WeakMap的不同

  1. 原生的WeakMap持有的是每个键对象的“弱引用”,这意味着在没有其他引用存在时垃圾回收能正确进行。而Map则不能。
  2. WeakMap的 key 是不可枚举的。

WeakMap对象上的一些方法

  1. set(key,value),在Map对象中设置与指定的键key关联的值value,并返回WeakMap对象。
  2. has(key),判断Map对象上是否存在某个键值,存在返回true,不存在返回false。
  3. get(key),获取Map对象上键值key的值,存在返回value,不存在返回undefined。
  4. delete(key),删除指定的键值对,如果键值存在并成功删除返回true否者返回false
const map1 = new WeakMap();
  let a = {}
  let b = {}
  map1.set(a, 1);
  map1.set(b, 2);
  var val = map1.get(a) // val = 1