@@ -310,18 +310,19 @@ WeakSet不能遍历,是因为成员都是弱引用,随时可能消失,遍
310310
311311### Map结构的目的和基本用法
312312
313- JavaScript的对象,本质上是键值对的集合,但是只能用字符串当作键。这给它的使用带来了很大的限制。
313+ JavaScript的对象(Object) ,本质上是键值对的集合(Hash结构) ,但是只能用字符串当作键。这给它的使用带来了很大的限制。
314314
315315``` javascript
316316var data = {};
317317var element = document .getElementById (" myDiv" );
318318
319319data[element] = metadata;
320+ data[" [Object HTMLDivElement]" ] // metadata
320321```
321322
322323上面代码原意是将一个DOM节点作为对象data的键,但是由于对象只接受字符串作为键名,所以element被自动转为字符串` [Object HTMLDivElement] ` 。
323324
324- 为了解决这个问题,ES6提供了map数据结构 。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应。
325+ 为了解决这个问题,ES6提供了Map数据结构 。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现 。
325326
326327``` javascript
327328var m = new Map ();
@@ -349,6 +350,26 @@ map.has("title") // true
349350map .get (" title" ) // "Author"
350351```
351352
353+ 上面代码在新建Map实例时,就指定了两个键name和title。
354+
355+ 如果对同一个键多次赋值,后面的值将覆盖前面的值。
356+
357+ ``` javascript
358+ let map = new Map ();
359+ map .set (1 , ' aaa' );
360+ map .set (1 , ' bbb' );
361+ map .get (1 ) // "bbb"
362+ ```
363+
364+ 上面代码对键1连续赋值两次,后一次的值覆盖前一次的值。
365+
366+ 如果读取一个未知的键,则返回undefined。
367+
368+ ``` javascript
369+ new Map ().get (' asfddfsasadf' )
370+ // undefined
371+ ```
372+
352373注意,只有对同一个对象的引用,Map结构才将其视为同一个键。这一点要非常小心。
353374
354375``` javascript
@@ -391,13 +412,6 @@ map.set(-0, 123);
391412map .get (+ 0 ) // 123
392413```
393414
394- 如果读取一个未知的键,则返回undefined。
395-
396- ``` javascript
397- new Map ().get (' asfddfsasadf' )
398- // undefined
399- ```
400-
401415### 实例的属性和操作方法
402416
403417Map结构的实例有以下属性和操作方法。
@@ -576,7 +590,7 @@ map.forEach(function(value, key, map) {
576590
577591WeakMap结构与Map结构基本类似,唯一的区别是它只接受对象作为键名(null除外),不接受原始类型的值作为键名,而且键名所指向的对象,不计入垃圾回收机制。
578592
579- WeakMap的设计目的在于,键名是对象的弱引用(垃圾回收机制不将该引用考虑在内),所以其所对应的对象可能会被自动回收。当对象被回收后,WeakMap自动移除对应的键值对。典型应用是,一个对应DOM元素的WeakMap结构,当某个DOM元素被清除,其所对应的WeakMap记录就会自动被移除。基本上,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏。
593+ WeakMap的设计目的在于,键名是对象的弱引用(垃圾回收机制不将该引用考虑在内),所以其所对应的对象可能会被自动回收。当对象被回收后,WeakMap自动移除对应的键值对。典型应用是,一个对应DOM元素的WeakMap结构,当某个DOM元素被清除,其所对应的WeakMap记录就会自动被移除。基本上,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏。
580594
581595下面是WeakMap结构的一个例子,可以看到用法上与Map几乎一样。
582596
0 commit comments