网站首页 > 技术文章 正文
一、Map与Object对比
a. 具体用法不同,Map是map.set()、map.get()、map.has()、map.delete(),Object可以直接obj.xx进行设置,in判断是否存在(有bug,可以拿到原型上的)等,Map的key可以重名(后者覆盖前者),Object的Key不可重名
b. Map可以用任意类型值作为key,Object必须用string、symbol作为key
c. Map是有序的,Object是无序的
d. Map可以使用size属性获取长度/大小,Object需要循环获取
e. Map可以使用for-of迭代,Object不可迭代(可以通过Object.values\keys方式进行迭代)
f. 增删改查,Map性能比Object好,底层对Map做了特殊处理
g. Map没有属性描述符等,故相比Object消耗的内存要少
f. Map(这点和Set特性一致)中,0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为Key时,如果引用地址一致,那么也只能保持一个,如:
h. 可以使用二维数组初始化一个map,如:
二、WeakMap与Map对比
a. WeakMap的key必须是对象,否则报错
b. WeakMap不可迭代,但可以使用map.set()、map.has()、map.delete()方法,但没有get方法
c. WeakMap是弱引用,垃圾回收时,如果手动清理引用,会造成WeakMap的数据丢失,但Map不会,如:
上图可知,当obj被GC回收后,Map将继续保持引用,但WeakMap却造成了数据丢失。
d. 不可使用二维数组初始化WeakMap
三、Set与Map对比
a. 方法不同,Set是set.add(),set.clear(),set.delete(),set.has(),也有size属性等
b. 0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为Key时,如果引用地址一致,那么也只能保持一个
c. 值是唯一存在的
d. 可以使用二维数组初始化Set,如:
e. Set也是使用for-of进行迭代
四、WeakSet与Set
基本上和WeakMap一致,但WeakSet没有get方法
猜你喜欢
- 2024-11-18 浏览器垃圾回收
- 2024-11-18 JavaScript中各种源码实现(前端面试笔试必备)
- 2024-11-18 2021年要了解的34种JavaScript优化技术
- 2024-11-18 你可能不知道的JS开发技巧
- 2024-11-18 Javascript面试题总结1
- 2024-11-18 深入JavaScript教你内存泄漏如何防范
- 2024-11-18 关于前端174道 JavaScript知识点汇总(一)
- 2024-11-18 前端面试计划(二)ES6
- 2024-11-18 2022前端大厂VUE 面试题
- 2024-11-18 javascript中的内置对象和数据结构
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-