ES6 Map vs ES5 Object

Map vs Object

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Objects_vs._Maps

Maps 和 Objects 的区别

  1. 键类型不同,一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值;

  2. 键顺序不同,Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是;

  3. 键长度获取方式不同,Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算;

  4. 键值读写方式不同,Object 通过key字符串下标或key, Map 使用 get, set

  5. 是否存在键名冲突不同, Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突;

  6. 遍历方式不同,Object 支持 for ...in, for ...of , Map 支持 for ...of

  7. 性能差异,

Map

Map 对象保存键值对;

任何值(对象或者原始值) 都可以作为一个键或一个值;

const map = new Map();
// undefined map.set(`a`, 1);
// Map(1) {"a" => 1}
map.set(`c`, 3);
// Map(2) {"a" => 1, "c" => 3}
map.set(`b`, 2);
// Map(3) {"a" => 1, "c" => 3, "b" => 2}
map;
// Map(3) {"a" => 1, "c" => 3, "b" => 2} map[0];
// undefined
map["a"];
// undefined
map.get("a"); // 1
map.size;
// 3
map.length;
// undefined // set to array, [...set]
// ??? map to object, {...map} ??? not work at all Object.keys(map).length;
// 0
let obj = {...map};
// undefined
obj;
// {}

Object


const obj = {};
// undefined
obj.a = 1;
// 1
obj.c = 3;
// 3
obj.b = 2;
// 2
obj;
// {a: 1, c: 3, b: 2}
obj[0];
// undefined
obj["a"];
// 1
obj.a;
// 1 obj.length;
// undefined
Object.keys(obj).length;
// 3

Map 转换成 Object


Set 转换成 Array

https://www.cnblogs.com/xgqfrms/p/13757290.html

const set = new Set();
set.add(1) const arr = [...set];

same Value Zero algorithm

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality


refs

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

https://www.runoob.com/w3cnote/es6-map-set.html



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


最新文章

  1. vue.js 接收url参数
  2. 【转】NGUI研究院之三种方式监听NGUI的事件方法(七)
  3. 关于正则表达式中参数/g /m的详细分析和例子详解
  4. Asp.net Core基于MVC框架实现PostgreSQL操作
  5. 关于 hangfire 初始化工作机制
  6. 六 mybatis高级映射(一对一,一对多,多对多)
  7. linux中cat、more、less命令区别详解
  8. source insight 支持CC 文件
  9. 上海CEC大收购(包括华大九天)
  10. libthrift0.9.0解析(一)之TServer
  11. SQL Server自定义函数( 转载于51CTO )
  12. Bing必应(Yahoo雅虎)搜索引擎登录网站 - Blog透视镜
  13. oracle_连接数_查看
  14. poj 2528 Mayor's posters 线段树+离散化技巧
  15. windows Sever 2012下Oracle 12c安装配置方法图文教程
  16. python 读取mysql数据至csv文件中,并发送邮件
  17. Linux基础学习(8)--权限管理
  18. 若父设置了overflow: hidden;子如何不受影响
  19. 【Java】【控制流程】
  20. #pragma Directive in C/C++

热门文章

  1. 使用amoeba实现mysql读写分离
  2. testng学习笔记-- beforesuit和aftersuit
  3. : cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
  4. How Interfaces Work in Go
  5. C++ Primer Plus读书笔记(六)分支语句和逻辑运算符
  6. 数据湖-Apache Hudi
  7. 洛谷P3833
  8. Linux-CentOS7环境MySQL安装配置
  9. 省市县sql
  10. 彻底搞懂Cookie、Session、Token到底是什么