Sandeep Sihari
Sandeep Sihari

Reputation: 117

Why an empty array of N length in javascript does not have indices?

So I have created an empty array in Javascript

const x = Array(5);

Or

const x = new Array(5);

And if i check the length, Its 5 in both the cases but when I loop over it using .map then it did not give me the indices i.e 0,1,2,3,4

x.map((el, i) => i);

This should return [0,1,2,3,4]

Upvotes: 1

Views: 222

Answers (1)

CertainPerformance
CertainPerformance

Reputation: 370699

Because the specification requires that when an array is created like that with the Array constructor, where values is the argument list:

a. Let len be values[0].
b. Let array be ! ArrayCreate(0, proto).
c. If Type(len) is not Number, then
  i. Perform ! CreateDataPropertyOrThrow(array, "0", len).
  ii. Let intLen be 1𝔽.
d. Else,
  i. Let intLen be ! ToUint32(len).
  ii. If SameValueZero(intLen, len) is false, throw a RangeError exception.
e. Perform ! Set(array, "length", intLen, true).
f. Return array.

That's all it does, and nothing else. In short, it creates a new array object inheriting from Array.prototype, and then sets a length property on it. It doesn't create any numeric indicies on the array.

It's like

const createArray = (length) => {
  const newArr = Object.create(Array.prototype);
  newArr.length = length;
  return newArr;
};

const arr = createArray(5);
console.log(arr.length);
console.log(arr.hasOwnProperty('0'));

As a result, if you want to iterate over the array, you'll have to fill it first somehow - either with .fill, Array.from, or spreading it into a new array..

Upvotes: 2

Related Questions