cheqianxiao / cheqianxiao.github.io

🐈 my personal blog
http://cheqianxiao.github.io/
0 stars 0 forks source link

Map、WeakMap、Set、WeakSet #5

Open cheqianxiao opened 3 years ago

cheqianxiao commented 3 years ago

Map和普通对象的区别?

Map的key可以是任何数据类型, 而普通对象的key只能是string。

Map和WeakMap的区别?

区别在于Weak,当key是一个对象的时候,WeakMap只保持对这个对象的弱引用(weak reference), 相对的也有强引用,就是我们平常见的对象引用。弱引用对垃圾收集不构成垃圾回收条件。垃圾回收的条件是:当一个对象没有任何强引用时,这个对象就可以被当垃圾回收了。 栗子:

window.obj = {}
var map = new Map()
map.set(window.obj, 123)
delete window.obj   ===> obj仍在内存中
window.obj = {}
var map = new WeakMap()
map.set(window.obj, 123)
delete window.obj   ===> obj被垃圾回收了

Set

what's it is?

from mdn :

Set objects are collections of values. You can iterate through the elements of a set in insertion order. A value in the Set may only occur once; it is unique in the Set's collection.

set对象就是一些值的集合,我们可以按插入顺序去遍历里面的元素,里面每一个元素都是唯一的。 那么判断一个值否“唯一”的标准是什么呢? 这个标准并不完全是=== : 在set中 +0-0是不相等的, 而在ES6之前,+0 === -0,在set中NaNNaN是相等的,尽管 NaN !== NaN

Set和WeakSet的区别?

同Map vs WeakMap

参考: