数组的空位
数组的空位指,数组的某一个位置没有任何值。比如,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