Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Object 和 Map 的区别 #99

Open
nmsn opened this issue Sep 9, 2023 · 1 comment
Open

Object 和 Map 的区别 #99

nmsn opened this issue Sep 9, 2023 · 1 comment
Labels

Comments

@nmsn
Copy link
Contributor

nmsn commented Sep 9, 2023

No description provided.

@nmsn nmsn added the ES6 label Sep 9, 2023
@nmsn
Copy link
Contributor Author

nmsn commented Sep 18, 2023

Key 的数据类型

  • Object 的键可以是数字(也会转化为字符串)、字符串、Symbol
  • Map 的键可以包括现有的 JavaScript 类型,包括对象、数组和函数等

Key 的顺序

  • Object.keys 获取的键的顺序将是数字(升序)- 字符串(按创建顺序)- symbol
  • Map 的键将以声明的顺序进行排序

性能

Object 当 Key 为有序连续的整数时,Object 的性能优于 Map(V8 对 Object 在键为有序连续正整数时做了优化)

V8 对 Object 的处理有优化手段;
当对象属性较少或者 Key 为数字类型时,会采用快属性,快属性使用线性结构存储。
当属性变多,为了确保新增跟删除的效率,会采用慢属性,使用键值对的方式存储属性内容。

当 Key 为字符串、非有序连续整数、Symbol 时 Map 的添加和读取性能优于 Object,修改和 删除操作性能相差不大;(Object 会把键转为 String 类型,消耗了一部分性能)

其他

  • 多层数据嵌套时用 Object,用链式调用比较方便
  • JSON 支持 Object,不支持 Map。考虑转换的情况下使用 Object

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant