编程语言
首页 > 编程语言> > Web开发技术梳理 0xB JavaScript(0x8)带键的集合

Web开发技术梳理 0xB JavaScript(0x8)带键的集合

作者:互联网

映射

    Map对象

    类型数组视图具有自描述性的名字,并且提供数据类型信息,例如Int8, Uint32, Float64等等。如一个特定类型数组视图Uint8ClampedArray. 它意味着数据元素只包含0到255的整数值。它通常用于Canvas数据处理。

var sayings = new Map();
sayings.set('dog', 'woof');
sayings.set('cat', 'meow');
sayings.set('elephant', 'toot');
sayings.size; // 3
sayings.get('fox'); // undefined
sayings.has('bird'); // false
sayings.delete('dog');
sayings.has('dog'); // false

for (var [key, value] of sayings) {
  console.log(key + ' goes ' + value);
}
// "cat goes meow"
// "elephant goes toot"

sayings.clear();
sayings.size; // 0

     Object和Map的比较

    一般地,objects会被用于将字符串类型映射到数值。Object允许设置键值对、根据键获取值、删除键、检测某个键是否存在。而Map具有更多的优势。

  • Object的键均为Strings类型,在Map里键可以是任意类型。
  • 必须手动计算Object的尺寸,但是可以很容易地获取使用Map的尺寸。
  • Map的遍历遵循元素的插入顺序。
  • Object有原型,所以映射中有一些缺省的键。(可以用 map = Object.create(null) 回避)。

      用Map还是Object?

    WeakMap对象

     WeakMap对象也是键值对的集合。它的键必须是对象类型,值可以是任意类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被GC回收掉。WeakMap提供的接口与Map相同。
    与Map对象不同的是,WeakMap的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。

     WeakMap对象的一个用例是存储一个对象的私有数据或隐藏实施细节。

const privates = new WeakMap();

function Public() {
  const me = {
    // Private data goes here
  };
  privates.set(this, me);
}

Public.prototype.method = function () {
  const me = privates.get(this);
  // Do stuff with private data in `me`...
};

module.exports = Public;

集合

    Set对象

    Set对象是一组值的集合,这些值是不重复的,可以按照添加顺序来遍历。

var mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");

mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2

for (let item of mySet) console.log(item);
// 1
// "some text"

    数组和集合的转换

    可以使用Array.from或展开操作符来完成集合到数组的转换。同样,Set的构造器接受数组作为参数,可以完成从Array到Set的转换。需要重申的是,Set对象中的值不重复,所以数组转换为集合时,所有重复值将会被删除。

Array.from(mySet);
[...mySet2];

mySet2 = new Set([1,2,3,4]);

    Array和Set的对比

    一般,使用数组,但是集合对象也有一些优势

     WeakSet对象

    WeakSet对象是一组对象的集合。WeakSet中的对象不重复且不可枚举。

    与Set对象的主要区别有:

 

标签:Web,0x8,sayings,对象,Object,开发技术,Set,Map,mySet
来源: https://blog.csdn.net/funkstill/article/details/88867390