[英]Why an empty array of N length in javascript does not have indices?
所以我在 Javascript 中創建了一個空數組
const x = Array(5);
或者
const x = new Array(5);
如果我檢查長度,在這兩種情況下都是5
,但是當我使用.map
循環它時,它沒有給我索引,即0,1,2,3,4
x.map((el, i) => i);
這應該返回[0,1,2,3,4]
因為規范要求當使用 Array 構造函數創建數組時,其中values
是參數列表:
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.
這就是它所做的一切,沒有別的。 簡而言之,它創建一個繼承自Array.prototype
的新數組 object ,然后在其上設置一個length
屬性。 它不會在數組上創建任何數字索引。
就像是
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'));
因此,如果你想遍歷數組,你必須先以某種方式填充它——要么使用.fill
、 Array.from
,要么將其傳播到一個新數組中。 .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.