Javascript的默认对象表示方式 {} ,即一组键值对。

但是Javascript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map。

1.Map

ES6新增了Map数据结构,Map对象保存键值对,任何值(原始值或对象)都可以作为一个键或一个值。

Map是一组键值对,有key 也有value。

初始化Map需要一个二维数组,或者直接初始化一个空Map。 Map具有以下方法:

set ,添加key-value

has,判断是否存在key

get,获取对应key的值

delete, 删除对应的key以及value

var m = new Map();  //空Map
m.set('one', 10); //添加新的key-value
m.set('two', 20); var a = m.has('one'); //是否存在key 'one'
a; //true var b = m.get('two');
b; // m.delete('one'); //删除key 'one' m.get('one'); //undefined

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

var m = new Map();
m.set('one', 10);
m.set('one', 20);
m.get('one'); //

如果key是一个对象。

let m = new Map();
let obj = {
name: 'one',
sex: '男'
};
let a = m.set(obj, 'myObj'); console.log(a); //Map { {name: 'one', sex: '男'} => 'myObj' }

2.Set

Set 和 Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set:

var s1 = new Set();  //空Set
var s2 = new Set([1,2,3]); //含1,2,3

重复元素在Set中自动被过滤:

var s = new Set([1,2,3,3,'3']);
s; // Set {1,2,3, "3"}

注意数字3和字符串'3'是不同的元素。

通过add() 方法可以添加元素到 Set中,乐意重复添加,但不会有效果:

s.add(4);
s; // Set {1,2,3, '3', 4}
s.add(4);
s; // 仍然是 Set {1,2,3, '3', 4}

通过delete() 方法可以删除元素:

s.delete(3);
console.log(s); // Set {1,2, '3'}

3.总结

Map和Set是ES6标准新增的数据类型。

兼容性:

IE8及以下版本不支持Map对象。


参考文档: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

ES6新增的数据类型Map和Set。的更多相关文章

  1. ES6深入浅出-10 ES6新增的数据类型-1.Symbol与隐藏属性

    ES5现有的数据类型.7种数据类型. 新的类型是属于Object 最普通的类型.plain object 数组array 函数function 下面这些都属于Object类型. 今天要讲的 set类型 ...

  2. ES6 新增基本数据类型Symbol

    ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...

  3. ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重

    一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组. Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  4. ES6深入浅出-10 ES6新增的数据类型-3.其他类型

    Map类型 Map 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map Ma ...

  5. ES6 新的数据类型Map和Set

    Map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array: var names = ['Michael', 'Bo ...

  6. ES6新增特性

    ES6:  ECMA 第六次改版   块级作用域:   凡是被{ }包裹住的代码都是块级作用域,除了对象       特点:会造成一个暂时性死区    新增声明变量的两种方式: let:     a. ...

  7. ES6新增的常用数组方法(forEach,map,filter,every,some)

    ES6新增的常用数组方法 let arr = [1, 2, 3, 2, 1]; 一 forEach => 遍历数组 arr.forEach((v, i) => { console.log( ...

  8. 浅谈ES6新增数据类型:Symbol

    面试中喜闻乐见的问题就是问我们的ES6新增了哪些个新特性 这篇文章一起学习一下新增的数据类型:Symbol JS的原始数据类型:6种Boolean,String,Undefined,NULL,Numb ...

  9. es6新增功能

    声明命令 1. let命令 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效.下面代码在代码块之中,分别用let和var声明了两个变量.然 ...

随机推荐

  1. node.js学习三--------------------- http服务器模块的搭建

    /** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); //创建 ...

  2. git 命令提交项目到github

    git 命令提交项目到github步骤如下: 1.使用git 命令客户端进入项目根路径,输入 git init  命令,创建github本地根目录 2.把文件加入到本地项目 git add .  ,如 ...

  3. DAY2:数据类型Python3.6

    数字 1.int(整型) 2. long(长整型) 3.float(浮点型) 4.complex(复数)  布尔值 1.真或假 1或0表示 字符串 知识补充 字符串转二进制 mes = "北 ...

  4. IP通信基础课堂笔记----第二章(重点)

    TCP报文及传输 TCP报文主要学习的内容包括,报文格式.连接管理.流量控制.差错控制. TCP报文是由报文头部和数据两个部分组成.占20字节的报文头部包括源端口.位目的端口.序号..确认号.首部长度 ...

  5. JS高德地图应用 ---- 鼠标点击加入标记 & POI搜索

    代码如下 (填入Key值) : <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  6. WPF自定义用户控件不显示

    1,Themes\Generic.xaml最好不要更名 "Generic.xaml"这个名称并非偶然通过上面的叙述,你可能会有冲动将Generic.xaml中的Style代码剪切出 ...

  7. winform 写入txt(可以连续性的在文本内容后面追加)

    在上一篇写入txt的时候,不可以在后面追击,调用一次,以前的同名的文本就会覆盖掉.这次的功能会修改上次这个小bug StreamWriter sw = new StreamWriter("D ...

  8. head语法

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾.1.命令格式:head ...

  9. 学习Git笔记(更新中)

    参考网址:https://blog.csdn.net/zmx729618/article/details/52174373 跟着练习一下,写的很好. Git:是一个分布式版本控制系统. GitHub: ...

  10. 周强 201771010141 《面向对象程序设计(Java)》第十一周学习总结

    实验十一   集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Stack ...