22
33## Array.from()  
44
5- Array.from方法用于将两类对象转为真正的数组 :类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
5+ ` Array.from  ` 方法用于将两类对象转为真正的数组 :类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。
66
77``` javascript 
88Array .from (' hello'  )
@@ -20,34 +20,48 @@ Array.from(ps).forEach(function (p) {
2020});
2121``` 
2222
23- 上面代码中,querySelectorAll方法返回的是一个类似数组的对象 ,只有将这个对象转为真正的数组,才能使用forEach方法。
23+ 上面代码中,` querySelectorAll ` 方法返回的是一个类似数组的对象 ,只有将这个对象转为真正的数组,才能使用forEach方法。
2424
25- Array.from方法可以将函数的arguments对象 ,转为数组。
25+ ` Array.from  ` 方法可以将函数的 ` arguments ` 对象 ,转为数组。
2626
2727``` javascript 
2828function  foo () {
29-   var  args =  Array .from (  arguments   );
29+   var  args =  Array .from (arguments );
3030}
3131
32- foo (  " a " ,  " b " ,  " c "   );
32+ foo (' a ' ,  ' b ' ,  ' c '  );
3333``` 
3434
35- 任何有length属性的对象,都可以通过Array.from方法转为数组。
35+ 值得提醒的是,扩展运算符(` ... ` )也可以将某些数据结构转为数组。
36+ 
37+ ``` javascript 
38+ //  arguments对象
39+ function  foo () {
40+   var  args =  [... arguments ];
41+ }
42+ 
43+ //  NodeList对象
44+ [... document .querySelectorAll (' div'  )]
45+ ``` 
46+ 
47+ 扩展运算符背后调用的是遍历器接口(` Symbol.iterator ` ),如果一个对象没有部署这个接口,就无法转换。` Array.from ` 方法就不存在这个问题,比如下面的这个例子,扩展运算符就无法转换。
48+ 
49+ 任何有` length ` 属性的对象,都可以通过` Array.from ` 方法转为数组。
3650
3751``` javascript 
3852Array .from ({ 0 :  " a"  , 1 :  " b"  , 2 :  " c"  , length:  3  });
3953//  [ "a", "b" , "c" ]
4054``` 
4155
42- 对于还没有部署该方法的浏览器,可以用Array .prototype.slice方法替代 。
56+ 对于还没有部署该方法的浏览器,可以用 ` Array .prototype.slice ` 方法替代 。
4357
4458``` javascript 
4559const  toArray  =  (() => 
4660  Array .from  ?  Array .from  :  obj  =>  [].slice .call (obj)
4761)();
4862``` 
4963
50- Array.from() 还可以接受第二个参数,作用类似于数组的map方法 ,用来对每个元素进行处理。
64+ ` Array.from ` 还可以接受第二个参数,作用类似于数组的 ` map ` 方法 ,用来对每个元素进行处理。
5165
5266``` JavaScript 
5367Array .from (arrayLike, x  =>  x *  x);
@@ -58,14 +72,26 @@ Array.from([1, 2, 3], (x) => x * x)
5872//  [1, 4, 9]
5973``` 
6074
61- 下面的例子将数组中布尔值为false的成员转为0 。
75+ 下面的例子将数组中布尔值为 ` false ` 的成员转为 ` 0 ` 。
6276
6377``` javascript 
6478Array .from ([1 , , 2 , , 3 ], (n ) =>  n ||  0 )
6579//  [1, 0, 2, 0, 3]
6680``` 
6781
68- ` Array.from() ` 可以将各种值转为真正的数组,并且还提供map功能。这实际上意味着,你可以在数组里造出任何想要的值。
82+ 另一个例子是返回各种数据的类型。
83+ 
84+ ``` javascript 
85+ function  typesOf  () {
86+   return  Array .from (arguments , value  =>  typeof  value)
87+ }
88+ typesOf (null , [], NaN )
89+ //  ['object', 'object', 'number']
90+ ``` 
91+ 
92+ 如果` map ` 函数里面用到了` this ` 关键字,还可以传入` Array.from ` 的第三个参数,用来绑定` this ` 。
93+ 
94+ ` Array.from() ` 可以将各种值转为真正的数组,并且还提供` map ` 功能。这实际上意味着,你可以在数组里造出任何想要的值。
6995
7096``` javascript 
7197Array .from ({ length:  2  }, () =>  ' jack'  )
@@ -74,7 +100,7 @@ Array.from({ length: 2 }, () => 'jack')
74100
75101上面代码中,` Array.from ` 的第一个参数指定了第二个参数运行的次数。这种特性可以让该方法的用法变得非常灵活。
76102
77- ` Array.from() ` 的另一个应用是,将字符串转为数组,然后返回字符串的长度。这样可以避免JavaScript将大于 ` \uFFFF ` 的Unicode字符,算作两个字符的bug。
103+ ` Array.from() ` 的另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种Unicode字符,可以避免JavaScript将大于 ` \uFFFF ` 的Unicode字符,算作两个字符的bug。
78104
79105``` javascript 
80106function  countSymbols (string ) {
@@ -84,25 +110,34 @@ function countSymbols(string) {
84110
85111## Array.of()  
86112
87- Array.of方法用于将一组值 ,转换为数组。
113+ ` Array.of  ` 方法用于将一组值 ,转换为数组。
88114
89115``` javaScript 
90116Array .of (3 , 11 , 8 ) //  [3,11,8]
91117Array .of (3 ) //  [3]
92118Array .of (3 ).length  //  1
93119``` 
94120
95- 这个方法的主要目的,是弥补数组构造函数Array() 的不足。因为参数个数的不同,会导致Array() 的行为有差异。
121+ 这个方法的主要目的,是弥补数组构造函数 ` Array() ` 的不足。因为参数个数的不同,会导致 ` Array() ` 的行为有差异。
96122
97123``` javascript 
98124Array () //  []
99125Array (3 ) //  [undefined, undefined, undefined]
100- Array (3 ,11 ,8 ) //  [3, 11, 8]
126+ Array (3 ,  11 ,  8 ) //  [3, 11, 8]
101127``` 
102128
103- 上面代码说明,只有当参数个数不少于2个,Array()才会返回由参数组成的新数组。
129+ 上面代码说明,只有当参数个数不少于2个,` Array() ` 才会返回由参数组成的新数组。
130+ 
131+ ` Array.of ` 基本上可以用来替代` new Array() ` ,并且不存在` new Array(length) ` 导致的重载。它的行为非常统一。
132+ 
133+ ``` javascript 
134+ Array .of () //  []
135+ Array .of (undefined ) //  [undefined]
136+ Array .of (1 ) //  [1]
137+ Array .of (1 , 2 ) //  [1, 2]
138+ ``` 
104139
105- Array.of方法可以用下面的代码模拟实现 。
140+ ` Array.of  ` 方法可以用下面的代码模拟实现 。
106141
107142``` javascript 
108143function  ArrayOf (){
@@ -112,12 +147,16 @@ function ArrayOf(){
112147
113148## 数组实例的copyWithin()  
114149
115- 数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
150+ 数组实例的` copyWithin ` 方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。
151+ 
152+ ``` javascript 
153+ Array .prototype .copyWithin (target, start =  0 , end =  this .length )
154+ ``` 
116155
117156它接受三个参数。
118157
119- -  target(必需):从该位置开始复制数据 。
120- -  start(必需 ):从该位置开始读取数据。如果为负值,表示倒数。
158+ -  target(必需):从该位置开始替换数据 。
159+ -  start(可选 ):从该位置开始读取数据,默认为0 。如果为负值,表示倒数。
121160-  end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。
122161
123162这三个参数都应该是数值,如果不是,会自动转为数值。
@@ -157,7 +196,7 @@ i32a.copyWithin(0, 2);
157196
158197## 数组实例的find()和findIndex()  
159198
160- 数组实例的find方法 ,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员 ,然后返回该成员。如果没有符合条件的成员,则返回undefined 。
199+ 数组实例的 ` find ` 方法 ,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为 ` true ` 的成员 ,然后返回该成员。如果没有符合条件的成员,则返回 ` undefined ` 。
161200
162201``` javascript 
163202[1 , 4 , - 5 , 10 ].find ((n ) =>  n <  0 )
@@ -172,9 +211,9 @@ i32a.copyWithin(0, 2);
172211}) //  10
173212``` 
174213
175- 上面代码中,find方法的回调函数可以接受三个参数 ,依次为当前的值、当前的位置和原数组。
214+ 上面代码中,` find ` 方法的回调函数可以接受三个参数 ,依次为当前的值、当前的位置和原数组。
176215
177- 数组实例的findIndex方法的用法与find方法非常类似 ,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1 。
216+ 数组实例的 ` findIndex ` 方法的用法与 ` find ` 方法非常类似 ,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回` -1 ` 。
178217
179218``` javascript 
180219[1 , 5 , 10 , 15 ].findIndex (function (value , index , arr ) {
@@ -198,7 +237,7 @@ i32a.copyWithin(0, 2);
198237
199238## 数组实例的fill()  
200239
201- fill()使用给定值 ,填充一个数组。
240+ ` fill ` 方法使用给定值 ,填充一个数组。
202241
203242``` javascript 
204243[' a'  , ' b'  , ' c'  ].fill (7 )
@@ -208,9 +247,9 @@ new Array(3).fill(7)
208247//  [7, 7, 7]
209248``` 
210249
211- 上面代码表明,fill方法用于空数组的初始化非常方便 。数组中已有的元素,会被全部抹去。
250+ 上面代码表明,` fill ` 方法用于空数组的初始化非常方便 。数组中已有的元素,会被全部抹去。
212251
213- fill()还可以接受第二个和第三个参数 ,用于指定填充的起始位置和结束位置。
252+ ` fill ` 方法还可以接受第二个和第三个参数 ,用于指定填充的起始位置和结束位置。
214253
215254``` javascript 
216255[' a'  , ' b'  , ' c'  ].fill (7 , 1 , 2 )
0 commit comments