Ответ 1
map
работает только с определенными целыми свойствами массива. Array(n)
не задает целочисленные свойства, а Array(n).fill()
-. Там существует разница между отсутствием свойства и существующим свойством, значение которого undefined
.
Array(n)
устанавливает свойство length
для массива, но он не устанавливает никаких свойств. Объект массива не имеет целочисленных свойств.
.fill
устанавливает все целочисленные свойства для массива от нуля до единицы меньше length
. Когда вы выполняете Array(n)
, вы устанавливаете свойство length
для нового aray, а затем .fill()
определяет и устанавливает каждое целочисленное свойство до n-1
. Массив, созданный Array(n).fill()
, имеет свойства, определенные до length - 1
. (Свойства имеют значение undefined
, потому что вы не передали аргумент fill
, но они существуют.)
В pracitcal терминах вы можете увидеть разницу, если вы делаете Object.keys(Array(4))
(пустой массив) по сравнению с Object.keys(Array(4).fill())
(список строк "0"
до "3"
). В первом случае свойства не существуют; во втором случае они делают.