首先整理一下,js一共有哪些数据类型
1. Number
2. String
3. Boolean
4. null
5. undefined
6. Object
7. Symbol
其中,object又分为
- Plain Object(简单对象)
- array(数组)
- function(函数)
- date(日期)
- RegExp(正则)
- ......
ES6给Object新增了几种数据类型
- Set //集合
- Map //表示一种映射关系
- WeakSet
- WeakMap
- TypedArray //有类型的数组
set 对象
MDN上的解释
Set
对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
可以简单的理解为去重之后的对象

无论值是数字、字符串还是undefined或者null

对象引用也会去重

Map对象
先来看看MDN上对Map的解释
Map
对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
在Map被发明之前,对象的key只能是字符串

我们来试试Map

Map最大的功能就是弥补了对象只能用字符串作为key这个缺点,现在可以用任何东西做为key
Map
的两个apiMap.get()
获取Map.set()
设置使用
Object.keys(Map)
不能获取Map的key

那么该怎么获取呢
Map
是可以迭代的,那么用遍历来试试使用
Map.keys()
可以获取到key
来获取一下value
使用
Map.values()

如果想获取
key
和vaule
呢使用
Map.entries()

WeakSet
WeakSet 对象允许你将弱保持对象存储在一个集合中>
首先来明确一点,对象都是占内存的!
所有有了垃圾回收机制
垃圾回收的意思可以理解为,将已经不需要的内存释放
一个主要的方法就是:找出用不到的对象,然后删除它
最简单的通知浏览器垃圾回收的方法
//假设有一个对象a,占用了100m内存
var a = {/*我占用了100M内存*/}
a = null // 浏览器就会垃圾回收掉那100m内存 什么时候回收不确定
总结来说就是:把所有指向这块内存的变量全部置为null
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放
(说直白一点就是有一块内存自己不能用,也不能将其释放给别人用)
再回头看看WeakSet的解释,允许你将弱保持对象存储在一个集合中
弱引用???
在计算机程序设计中,弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。
(弱引用不属于GC(垃圾回收)计算的范围)
所以,把一个对象放在WeakSet()里,对象都是弱引用,表示其可以被回收
Set()
和WeakSet()
的区别是
1. Set()
是强引用,WeakSet()
是弱引用
2. 可以获取Set()
所有的值,使用.entries()
,而WeakSet()
不行
WeakMap
WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
Map()
和WeakMap()
的区别与Set()
和WeakSet()
的区别相同
网友评论