Object属性排序、与Map的区别

Posted by CodingWithAlice on September 9, 2021

Object属性排序、与Map的区别

image-20241103200316638

1、Object 中各属性排序规则

image-20241024095830999

  • 非负整数 会最先被列出,排序是从小到大的数字顺序
  • 正数字 > 字符串 > 负整数 > 浮点数 > Symbol,顺序是根据插入的顺序
  • 隐式字符串化:当对象的键也被设置为属性时,会字符串化一个对象 - [object Object];
2、JSON 默认不支持 Map,但是可以转一层

若想要通过 JSON 传输 Map 则需要使用到 .toJSON() 方法,然后在 JSON.parse() 中传入复原函数来将其复原。详细可以看下 JSON 的序列化和解析

  Object Map
定义 1、键的类型:只能是字符串/Symbol
2、顺序:不会完全保持插入时的顺序
3、『计算长度绕』:Object.keys(testObj).length
4、『默认不可迭代』,只支持 for-in 访问
5、可以覆盖原型上的键
6、JSON 默认支持 Object
1、键的类型:任何类型
2、保持其插入时的顺序
3、『计算长度简单』:mapObj.size()
4、『**可迭代对象**』,支持 for-of
5、不会覆盖原型上的键
6、JSON 默认不支持 Map
操作 1、创建
let o = {}; // 对象字面量
let o = new Object(); // 构造函数
let o = Object.create(null); // 静态方法
2、新增/修改元素
o.x=1;o['y'] = 2;
3、读取元素
o.x;o['y']; 或者
4、删除元素
delete o.b;
1、创建:
let map = new Map().set('a', 1); // 构造函数
2、新增/修改元素
map.set('x', 1);
3、读取元素
map.get('x');
4、删除元素
map.delete('b');
性能   Map性能比Object好(占用内存小,增删速度更快)
适合 场景 1、只是 简单的数据结构 时(在数据少的时候占用内存更少,新建更为高效)
2、需要用到 JSON 进行文件传输时( JSON 不默认支持 Map
3、需要对多个键值进行运算时(语法更简洁)
4、需要 覆盖原型 上的键时
1、储存的键不是字符串/数字/ Symbol
2、储存 大量的数据 时(占用的内存更小)
3、需要进行许多 新增/删除元素的操作时(速度更快)
4、需要 保持插入时的顺序
5、需要 迭代(默认可迭代对象)