数组的空位
数组的空位指,数组的某一个位置没有任何值。比如,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:可选,起始索引,默认值为0end:可选,终止索引,默认值为this.length