Да предположим, че имаме 3 масива:
var arr1 = [undefined, undefined, undefined];
var arr2 = [, , ,];
var arr3 = new Array(3);
Всички ли са идентични в JavaScript? Ако искаме да използваме undefined
като стойност по подразбиране за масив с фиксиран размер, можем ли да ги използваме взаимозаменяемо?
Отговори:
5 за отговор № 1Вторите две са едни и същи (макар че втората може да предизвика проблеми при някои браузъри), но първата е различна.
Първият
var arr1 = [undefined, undefined, undefined];
прави изричен задания към първите три индекса в масива. Дори и да присвоявате undefined
факта, че индексите 0
, 1
, и 2
са цели на операции по присвояване означава, че тези елементи на масива ще бъдат третирани като "реални" по методи като .reduce()
:
[undefined, undefined, undefined].reduce(function(c) { return c + 1; }, 0);
// 3
[,,].reduce(function(c) { return c + 1; }, 0);
// 0
Много от методите Array.prototype пропускат неинициализирани елементи на масив.