Skip to content

Commit 958f789

Browse files
committed
edit set-map
1 parent a5e2256 commit 958f789

3 files changed

Lines changed: 52 additions & 14 deletions

File tree

docs/destructuring.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ let { log, sin, cos } = Math;
258258

259259
上面代码将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。
260260

261-
## 函数参数的解构
261+
## 函数参数的解构赋值
262262

263263
函数的参数也可以使用解构。
264264

docs/function.md

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -607,10 +607,35 @@ var handler = {
607607

608608
长期以来,JavaScript语言的this对象一直是一个令人头痛的问题,在对象方法中使用this,必须非常小心。箭头函数绑定this,很大程度上解决了这个困扰。
609609

610-
箭头函数内部,还可以再使用箭头函数。下面是一个部署管道机制(pipeline)的例子
610+
箭头函数内部,还可以再使用箭头函数。下面是一个ES5语法的多重嵌套函数
611611

612612
```javascript
613+
function insert(value) {
614+
return {into: function (array) {
615+
return {after: function (afterValue) {
616+
array.splice(array.indexOf(afterValue) + 1, 0, value);
617+
return array;
618+
}};
619+
}};
620+
}
621+
622+
insert(2).into([1, 3]).after(1); //[1, 2, 3]
623+
```
624+
625+
上面这个函数,可以使用箭头函数改写。
626+
627+
```javascript
628+
let insert = (value) => ({into: (array) => ({after: (afterValue) => {
629+
array.splice(array.indexOf(afterValue) + 1, 0, value);
630+
return array;
631+
}})});
613632

633+
insert(2).into([1, 3]).after(1); //[1, 2, 3]
634+
```
635+
636+
下面是一个部署管道机制(pipeline)的例子,即前一个函数的输出是后一个函数的输入。
637+
638+
```javascript
614639
const pipeline = (...funcs) =>
615640
val => funcs.reduce((a, b) => b(a), val);
616641

@@ -620,10 +645,9 @@ const addThenMult = pipeline(plus1, mult2);
620645

621646
addThenMult(5)
622647
// 12
623-
624648
```
625649

626-
上面的代码等同于下面的写法
650+
如果觉得上面的写法可读性比较差,也可以采用下面的写法
627651

628652
```javascript
629653
const plus1 = a => a + 1;

docs/set-map.md

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -310,18 +310,19 @@ WeakSet不能遍历,是因为成员都是弱引用,随时可能消失,遍
310310

311311
### Map结构的目的和基本用法
312312

313-
JavaScript的对象,本质上是键值对的集合,但是只能用字符串当作键。这给它的使用带来了很大的限制。
313+
JavaScript的对象(Object),本质上是键值对的集合(Hash结构),但是只能用字符串当作键。这给它的使用带来了很大的限制。
314314

315315
```javascript
316316
var data = {};
317317
var element = document.getElementById("myDiv");
318318

319319
data[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
327328
var m = new Map();
@@ -349,6 +350,26 @@ map.has("title") // true
349350
map.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);
391412
map.get(+0) // 123
392413
```
393414

394-
如果读取一个未知的键,则返回undefined。
395-
396-
```javascript
397-
new Map().get('asfddfsasadf')
398-
// undefined
399-
```
400-
401415
### 实例的属性和操作方法
402416

403417
Map结构的实例有以下属性和操作方法。
@@ -576,7 +590,7 @@ map.forEach(function(value, key, map) {
576590
577591
WeakMap结构与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

Comments
 (0)