(JS文档自译)
Object和Map超级类似,两者都可以完成键-值对的设置、获取value、删除key并且根据key获取对应的value。因此,在过去Object常常被当作Map来使用。但是,Object和Map的不同之处会让Map在特定条件下成为一个更佳的选择。
| Map | Object | |
|---|---|---|
| 附加的Key | Map没有默认的key值 | Object具有原型对象,所以它包含默认的key值,并且使用不当时会和自定义的key值产生冲突(在ES5中可以通过Object.create(null)来设置去掉默认的key值,但这种解决方法并不常用) |
| Key的种类 | Map的key值可以是任何类型的值,包括函数、Object和任意基础数据类型 | Object的key值只能是String或Symbol |
| Key的顺序 | Map中的key值排序简单直接,一个Map对象迭代键值对、Key、Value的顺序和插入时的顺序一样 | 一般对象的键值是有顺序的,但这并不绝对,有时对象的键值排序会变得很复杂,所以最好不要依赖于插入的顺序。 |
| 大小 | Map的大小可以轻松通过size属性来获得 | Object的大小必须通过自行获取 |
| 迭代 | Map是可迭代对象,可以轻松完成迭代 | Object没有实现迭代协议,所以无法被for…of直接迭代(但可以自行实现迭代协议,或者使用Object.keys()或Object.entries()来迭代对象的键值和实体,for…in也可以迭代Object的可枚举属性) |
| 性能 | 频繁增减键值对时表现会更好 | 频繁增减键值对时表现较差 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
您必须登录才能参与评论!
立即登录
太好了