例如:爲什麼JavaScript的節目0長度爲陣列對象屬性,而不是索引元素
var arr = [];
arr[3.4] = 1;
console.log(arr.length);
在上面的代碼示例length
屬性保存零爲什麼和JS解析器內所發生的事情,因爲它的長度是零。
例如:爲什麼JavaScript的節目0長度爲陣列對象屬性,而不是索引元素
var arr = [];
arr[3.4] = 1;
console.log(arr.length);
在上面的代碼示例length
屬性保存零爲什麼和JS解析器內所發生的事情,因爲它的長度是零。
陣列的length
是反射性的最大數組索引存在於陣列中的。 「數組索引」(參見下文)是一個屬性名稱,它的整數值小於2 -1。由於3.4
不是整數,因此設置它不會改變length
。
數組是數據對象,所以沒有理由爲什麼數組不能有一個名爲3.4
的屬性,但該屬性不會影響length
,因爲它的名稱不符合數組索引的條件。
ES2015 9.4.2, Array Exotic Objects定義 「陣列指數」 爲一個整數小於2 -1:
屬性名稱P(在一個字符串值的形式)是一個數組索引當且僅當的ToString(ToUint32(P))等於P和ToUint32(P)不等於2 -1「。
這定義是相對於用於將length
值(重點煤礦):
每個數組對象都有一個
length
屬性,其值始終是一個非負整數小於2 。length
屬性的值在數值上大於名稱爲數組索引的每個屬性的名稱;無論何時創建或更改Array對象的屬性,必要時都會調整其他屬性以保持此不變。具體而言,每當自身屬性添加其名稱是一個數組索引,length
屬性的值被改變,如果必要的話,爲比數組索引的數值一個更多...
您必須使用整數作爲索引,而不是浮點數。
var arr = []; arr[3] = 1; console.log(arr.length);
JavaScript數組不能有分數索引。
你在那裏做了什麼在數組對象上被賦予一個名爲"3.4"
的屬性。
這不會影響length
屬性,該屬性旨在返回比最高有效索引更高的一個數字。
如果你想到數組應該如何工作,你應該意識到小數偏移是沒有意義的。
你可以嘗試使用一個對象與數組。
var arr = {};
arr[3.4] = 1;
arr[3.5] = 2;
arr[3.6] = 3;
console.log(Object.keys(arr).length);
請看本 [JavaScript對象的長度](http://stackoverflow.com/questions/5223/length-of-a-javascript-object-that-is-associative-array) – NikhilGoud