JavaScript Map 和 Object 的区别
不同点
Key filed
在 Object 中, key 必须是简单数据类型(整数,字符串或者是 symbol),而在 Map 中则可以是 JavaScript 支持的所有数据类型,也就是说可以用一个 Object 来当做一个Map元素的 key。
元素顺序
Map 元素的顺序遵循插入的顺序,而 Object 的则没有这一特性。
继承
Map 继承自 Object 对象。
新建实例
Object 支持以下几种方法来创建新的实例:
var obj = {...};
var obj = new Object();
var obj = Object.create(null);
Map 仅支持下面这一种构建方法:
var map = new Map([, ], [, ]); // map = {1 => 2, 2 => 3}
数据访问
Map 想要访问元素,可以使用 Map 本身的原生方法:
map.get() //
Object 可以通过 . 和 [ ] 来访问
obj.id; obj['id'];
判断某个元素是否在 Map 中可以使用
map.has();
判断某个元素是不是在 Object 中需要以下操作:
obj.id === undefined; // 或者 'id' in obj;
另外需要注意的一点是,Object 可以使用 Object.prototype.hasOwnProperty() 来判断某个key是否是这个对象本身的属性,从原型链继承的属性不包括在内。
新增一个数据
Map 可以使用 set() 操作:
map.set(key, value) // 当传入的 key 已经存在的时候,Map 会覆盖之前的值
Object 新增一个属性可以使用:
obj['key'] = value; obj.key = value; // object也会覆盖
删除数据
在 Object 中没有原生的删除方法,我们可以使用如下方式:
delete obj.id; // 下面这种做法效率更高 obj.id = undefined
需要注意的是,使用 delete 会真正的将属性从对象中删除,而使用赋值 undefined 的方式,仅仅是值变成了 undefined。属性仍然在对象上,也就意味着 在使用 for … in… 去遍历的时候,仍然会访问到该属性。
Map 有原生的 delete 方法来删除元素:
var isDeleteSucceeded = map.delete(); console.log(isDeleteSucceeded ); // true // 全部删除 map.clear();
获取size
Map 自身有 size 属性,可以自己维持 size 的变化。
Object 则需要借助 Object.keys() 来计算
console.log(Object.keys(obj).length);
Iterating
Map 自身支持迭代,Object 不支持。
如何确定一个类型是不是支持迭代呢? 可以使用以下方法:
console.log(typeof obj[Symbol.iterator]); // undefined console.log(typeof map[Symbol.iterator]); // function
何时使用 Map ,何时使用 Object?
虽然Map 在很多时候优于 Object,但是作为 JavaScript 最基础的数据类型,还是有很多情景更适合使用 Object。
- 当所要存储的是简单数据类型,并且 key 都为字符串或者整数或者 Symbol 的时候,优先使用 Object ,因为Object可以使用 字符变量 的方式创建,更加高效。
- 当需要在单独的逻辑中访问属性或者元素的时候,应该使用 Object,例如:
var obj = {
id: ,
name: "It's Me!",
print: function(){
return `Object Id: ${this.id}, with Name: ${this.name}`;
}
}
console.log(obj.print());//Object Id: 1, with Name: It's Me.
// 以上操作不能用 Map 实现
- JSON 直接支持 Object,但不支持 Map
- Map 是纯粹的 hash, 而 Object 还存在一些其他内在逻辑,所以在执行 delete 的时候会有性能问题。所以写入删除密集的情况应该使用 Map。
- Map 会按照插入顺序保持元素的顺序,而Object做不到。
- Map 在存储大量元素的时候性能表现更好,特别是在代码执行时不能确定 key 的类型的情况。
JavaScript Map 和 Object 的区别的更多相关文章
- Map与object的区别
Map 对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值. 语法 new Map([iterable]) 参数 iterable Iterable 可以是一个数组或者其他 itera ...
- JavaScript中Map和ForEach的区别
译者按: 惯用Haskell的我更爱map. 原文: JavaScript — Map vs. ForEach - What’s the difference between Map and ForE ...
- map泛型 map不指定泛型 与 Map<Object,Object>的区别
map泛型 map不指定泛型 与 Map<Object,Object>的区别 private void viewDetail(){ Map map1 = new HashMap(); Ma ...
- js es6 map 与 原生对象区别
区别 object和Map存储的都是键值对组合.但是: object的键的类型是 字符串: map的键的类型是 可以是任意类型: 另外注意,object获取键值使用Object.keys(返回数组): ...
- JavaScript Map 和 Set
结论 Map:存放键值对,区别于 Object,键可以是任何值. Set:存放不重复的值 Map 存储键值对,读取时与插入顺序一致. var map = new Map([[1, "1&qu ...
- Javascript中Function,Object,Prototypes,__proto__等概念详解
http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...
- 坑:JavaScript 中 操作符“==” 和“===” 的区别
标题:JavaScript 中 操作符"==" 和"===" 的区别 记录一些很坑的区别: 1. '' == '0' // false 0 == '' // t ...
- Javascript控制台打印Object对象
Javascript控制台打印Object对象 做项目的时候遇到一个问题,在调试代码时需要打印对象来查看具体数值,想了各种方法也没有实现,最后查资料知道了可以使用JSON.stringify()将ob ...
- Java不定参数Object… obj 和 Object[] 的区别
Java不定参数Object… obj 和 Object[] 的区别 简述: java中方法重载可以实现参数不同自动匹配对应方法.但现实中也存在这种问题.普通传参对于形如下面的方法,却显得臃肿而失优雅 ...
随机推荐
- div距离左边设置
margin-right:不加负号, margin-left:必须加负号,理解为倒数 margin-left:-10px;
- 父进程pid和子进程pid的大小关系
如果进程ID最大值没有达到系统进程数的上限,子进程比父进程ID大.但是如果进程ID达到上限,系统会分配之前分配但是已经退出的进程ID给新进程,这样有可能出现子进程ID比父进程小.
- HNUSTOJ-1543 字符串的运算再现
1543: 字符串的运算再现 时间限制: 1 Sec 内存限制: 128 MB提交: 34 解决: 7[提交][状态][讨论版] 题目描述 我们对字符串 S 做了以下定义:1. S ^ k表示由k ...
- Python Set intersection() 方法
描述 intersection() 方法用于返回两个或更多集合中都包含的元素,即交集. 语法 intersection() 方法语法: set.intersection(set1, set2 ... ...
- Codeforces 1215D. Ticket Game
传送门 博弈,发现情况有点多,分析一下把有用的状态提取出来 显然各个位置的数字是没用的,我们只要知道两边的数字和分别是多少 并且状态显然和左右两边的 "?" 数量有关 因为最终我们 ...
- 部署SonarQube代码检测服务并结合Jenkins使用
一.SonarQube部署前的内核参数等配置以及java环境配置 1. 修改内核参数配置,使满足环境要求 [root@sonarqube ~]# vim /etc/sysctl.conf vm.max ...
- npm学习(六)之如何创建 Node.js 模块
如何创建 Node.js 模块 Node.js 模块是一种可以发布到 npm 的包.当你创建一个新模块时,创建 package.json 文件是第一步. 你可以使用 npm init 命令创建 pac ...
- 软件开发中oracle查询常用方法总结
上次新霸哥和大家讲解了一些关于oracle的知识发现大家对oracle还是比较感兴趣的,下面新霸哥就大家比较关系的oracle中常用的查询有哪几种?做个和oracle相关的开发的朋友可能会知道答案,但 ...
- ubuntu apache 一个ip绑定多个域名,发布目录
1.将www.aaa.com 与 www.bbb.com 的DNS解析到你的服务器上 2.添加两个发布目录 /var/www/html/aaa /var/www/html/bbb 3.修改配置文件. ...
- Nginx 故障实例
linux vi 操作提示 Found a swap file by the name "/usr/local/nginx/conf/.nginx.conf.swp" 解决方法: ...