概述

set和map属于es6的内容,今天在看书的时候遇到了,所以好好的总结一下,供以后开发时参考,相信对其他人也有用。

参考资料:

mdn Keyed collections

Map和WeakMap

Map是一个键值对对象,它有2个特点:

  1. 它的键可以不局限于字符串,可以是任何类型
  2. 你可以根据插入的顺序来遍历里面的数据。

示例如下:

var haha = {a: 'a'};
var sayings = new Map();
sayings.set('dog', 'woof');
sayings.set(haha, 'meow');
sayings.size; // 2
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);
} sayings.clear();
sayings.size; // 0

一般来说,在这些时候使用Map而不是Object:

  1. 键的类型不知道
  2. 键的类型是数字,布尔值等。(在Object中它们会被转化为字符串)

WeakMap也是一个键值对对象,它有如下特点:

  1. 键只能是对象
  2. 值可以是任何类型
  3. 它不能被遍历。

它的用处之一是用来隐藏数据

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和WeakSet

Set是一个数据集对象,它有如下特点:

  1. 里面的每个元素都只出现一次
  2. 你可以根据插入的顺序来遍历里面的数据。

示例如下:

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"

Set和Array相互转化的方法:

//Set转化为Array
Array.from(mySet);
[...mySet2]; //Array转化为Set
mySet2 = new Set([1, 2, 3, 4]);

为什么要使用Set?

  1. 使用Array的indexOf方法很慢。
  2. Set可以根据值来删除元素。
  3. Set的元素不重复。

WeakSet是一个对象集对象,它有如下特点:

  1. 里面的元素都只能是对象
  2. 里面的元素都只出现一次。
  3. 不可被遍历。

WeakSet的优点之一是可以防止内存泄漏,具体使用方法不明。

map,set和weakmap,weakset的更多相关文章

  1. WeakMap与Map,使用WeakMap实现深拷贝循环引用问题

    1.Map可以使用任意类型的key值,不限字符串,对象等. 2.WeakMap只能使用对象作为key值,是弱引用,当从WeakMap中移除时,会自动垃圾回收 3.Object只能用基本类型作为key值 ...

  2. es6 Map,Set 和 WeakMap,WeakSet

    这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的.同时,在进行属性值添加与获取时有专门的get,set ...

  3. JavaScript深入理解-Set、Map、WeakSet和WeakMap

    Set Set 对象允许储存任何类型的唯一值,无论是原始值或者是对象引用 本质:构造函数,用来生成 Set 数据结构 描述 Set 对象是值的集合,你可以按照插入的顺序迭代它的元素.Set 中的元素只 ...

  4. ES6新增的Map和WeakMap 又是什么玩意?非常详细的解释

    上一篇文章讲了set和weakSet,这节咱就讲Map和weakMap是什么?这两篇文章并没有什么联系,主要知识用法类似而已.嘿嘿,是不是感觉舒服多了. 什么是Map 介绍什么是Map,就不得不说起O ...

  5. Map和WeakMap的方法和区别

    Map Map是一组键值对的结构,具有极快的查找速度. 一.构造函数不同 let map = new Map(); let weakmap = new WeakMap(); 二.内置函数不同 Map的 ...

  6. ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

    ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...

  7. es6笔记5^_^set、map、iterator

    一.set 1.基本用法 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值. let s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x ...

  8. ES6-Set和Map数据结构学习笔记

    Set和Map数据结构 Set 基本用法 ES6提供了新的数据结构--Set,类似于数组,但是成员的值是唯一的,没有重复的值,Set本身是一种构造函数,用来生成Set数据结构 var s = new ...

  9. ES6中的Map

    今天小编和大家一起探讨一下引用类型中的map,在其中会有一些map与数组联合应用,还有和map类似的weakmap类型的说明,这篇文章同时也增加了一些操作数组的办法和实际应用.大家也可以关注我的微信公 ...

随机推荐

  1. Kubernetes 1.3.1 快速单机部署

    Kubernetes发展到今天, 在官网上已经有非常多的成熟部署方案, 但是由于墙的原因, 最简单的MiniKube都无法进行, 参考了以下两篇文章后, 终于安装成功. k8s-1.13版本测试环境搭 ...

  2. Quartz.Net 定时服务

    http://www.cnblogs.com/jys509/p/4628926.html https://www.cnblogs.com/AmyLo/p/8125505.html https://bl ...

  3. 20172306 2018-2019-2 《Java程序设计与数据结构》第八周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第八周学习总结 教材学习内容总结 堆 堆是具有两个附加属性的一棵二叉树 它是一个完全树 对每一结点,它小于或等于其左 ...

  4. laravel-debugbar安装

    第一步:找到debugbar扩展包 扩展包的链接:https://packagist.org/packages/barryvdh/laravel-debugbar 第二步:安装 我测试的环境larav ...

  5. 2-1 如何抓不同的接口(手机抓包,web网页抓包)

    举个例子,一个测试和安卓的对话. 测试:Android你这里有个bug Android:这是服务端的bug 测试:是你这里显示的不对 Android:你去看服务端返回数据,他不对,你会不会测试. 从这 ...

  6. python3 第三十一章 - 模块

    1.什么是模块 如果从Python解释器退出并再次输入,您所做的定义(函数和变量)将丢失.因此,如果要编写一个稍长的程序,最好使用文本编辑器为解释器准备输入,并以该文件作为输入运行它.这称为创建脚本. ...

  7. PHP基础(命名错误)错误导致的500

    记得去年七月份参与一个项目发生的一个低级错误 因为不小心在命名一个方法时使用了一list做为名称,因此在后面无明业火被点燃. 发现一个500,无论如何调整总是500,数据库,文件,url都正确,但就是 ...

  8. sqlserver 分割字符串和调用

    传入某种规则拼接字符串获得数组(表) /*功能说明:传入字符串跟分割符('''SGHE00000003'',''SGHE00000004'',''SGHE00000005'''),返回一个Table* ...

  9. vue路由独享守卫beforeEnter

    在某个路由中,使用beforeEnter()方法,参数是to,from,next 和全局路由守卫的用法是一样的 例子: import Vue from 'vue' import Router from ...

  10. 如何安装ubuntu系统

    https://www.cnblogs.com/Chinasf/archive/2010/05/06/1728840.html    [Ubuntu 下挂ISO到虚拟光驱的方法] 各种方法参考如下论坛 ...