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- преобразует дыры в значениеundefinedsort- сохраняетfor..in- игнорирует (показывает только реальные индексы)
Last updated
Was this helpful?