数组的空位
数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。 
| 1 | Array(3) // [, , ,] | 
in运算符:如果指定的属性名在指定的对象或其原型链中,则in运算符返回true。
 空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值。
| 1 | 0 in [undefined, undefined, undefined] // true | 
对空位的处理
ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
- forEach(),- filter(),- reduce(),- every()和- some()都会跳过空位。
- map()会跳过空位,但会保留这个值
- join()和- toString()会将空位视为- undefined,而- undefined和- null会被处理成空字符串。
| 1 | // forEach方法 | 
ES6 则是明确将空位转为undefined。 
- Array.from方法会将数组的空位,转为- undefined
- 扩展运算符(...)也会将空位转为undefined
- fill()会将空位视为正常的数组位置
- for...of循环也会遍历空位
- entries()、- keys()、- values()、- find()和- findIndex()会将空位处理成- undefined
| 1 | // Array.from | 
注:由于空位的处理规则非常不统一,所以建议避免出现空位。
Array.from
| 1 | Array.from(arrayLike[, mapFn[, thisArg]]) | 
- arrayLike:想要转换成数组的伪数组对象或可迭代对象- 伪数组对象:拥有一个 length属性和若干索引属性的任意对象
- 可迭代对象:可以获取对象中的元素,如 Map和 Set 等
 
- 伪数组对象:拥有一个 
- mapFn (可选参数):如果指定了该参数,新数组中的每个元素会执行该回调函数
- thisArg (可选参数):可选参数,执行回调函数- mapFn时- this对象
Array.prototype.fill
| 1 | arr.fill(value[, start[, end]]) | 
- value:用来填充数组元素的值
- start:可选,起始索引,默认值为0
- end:可选,终止索引,默认值为- this.length