03. Array Holes
Элемент со значением undefined
и отсутствующий элемент -- это разные вещи, хотя и очень похожие. При попытке обратиться по индексу к дыре, будет получено значение undefined
. Ключа для таких элементов в массиве не существует. Определить есть ли дыра можно проверив наличие индекса в массиве а не элемента по индексу при помощи оператора in
:
> const a = [,,2];
> a[0]
undefined
> 0 in a
false
1 in a
false
2 in a
true
В ES6 (в функциях и в итераторе) дыры в массивах трактуются как неопределенные элементы со значением undefined
.
> Array.from(['a',,'b'])
[ 'a', undefined, 'b' ]
> [,'a'].findIndex(x => x === undefined)
0
> [...[,'a'].entries()]
[ [ 0, undefined ], [ 1, 'a' ] ]
Некоторые операции "видят" дыры в массиве, а некоторые игнорируют их:
forEach
- игнорируетevery
- игнорируетmap
- игнорирует при вызове функции, но сохраняет в массивеfilter
- удаляет из массиваjoin
- преобразует дыры в значениеundefined
sort
- сохраняетfor..in
- игнорирует (показывает только реальные индексы)
Last updated
Was this helpful?