2015-10-10 44 views
-1

我有一個包含子數組的父數組。父數組上的length屬性顯示0個結果,即使存在子數組時也是如此。即使它包含值,Array.length也是0 - Javascript

下面的代碼:

var balances = []; 
 
balances['kanav'] = 50; 
 
balances['yash'] = 50; 
 

 
alert(balances.length); 
 
console.log(balances);

是什麼原因?

+1

請有關[MCVE]代碼添加到你的問題;不要只鏈接到一個熱量資源。 –

+0

「長度」屬性被定義爲最高索引加1,如果它不包含任何索引則定義爲0。這些屬性不算作指數。 – Xufox

+1

@ Xufox-不完全是,*長度**是**至少**最高指數加1。它可以更高(例如'var a = new Array(8)'。 – RobG

回答

6

length屬性僅適用於數值爲數組的屬性。數組只是對象,具有特殊的長度屬性和一些方便的方法繼承Array.prototype

當你添加喜歡kanav佳日性質,它們被添加作爲普通對象的屬性,而不是指標,因此不影響長度

var arr = []; 
 

 
// Add plain object properties 
 
arr.foo = 'foo'; 
 
arr.bar = 'bar'; 
 

 
document.write(arr.length) // 0 
 

 
// Add some numeric properties 
 
// Since they are numbers, square bracket notation must be used 
 
arr[9] = 9; 
 

 
document.write('<br>' + arr.length) // 10

+0

同意@RobG。 [JSFiddle供參考](http://jsfiddle.net/RajeshDixit/1cvyjha6/7/) – Rajesh

1

在您的示例中,balances不是數組,它實際上是一個關聯數組(它們都是對象,但它們有不同的方法)。

如果你想使用數組你可以

var balances = [ 
    ["kanav", 50], 
    ["yash", 50] 
]; 
alert(balances.length); 
console.log(balances); 

如果你想留在當前的格式,你將不得不遍歷對象指望他們

var balances = []; 
balances['kanav'] = 50; 
balances['yash'] = 50; 

var i=0; 
for(var key in balances) { 
    if(balances.hasOwnProperty(key)) { 
     i++; 
    } 
} 
console.log(i); 
+0

'balances'是一個數組,它是也是一個對象,這仍然沒有回答這個問題。 – Xufox

+0

那還好嗎? – Fletch

1

您正在使用陣列作爲JSON對象,但陣列手柄索引或推功能。因此,如果你以這種方式使用它,它會產生正確的結果。

var balances = []; 
balances.push('something'); 
balances.push('another'); 

alert(balances.length); 
console.log(balances); 
在此語法

或者否則:

var balances = []; 
balances[0] = 50; 
balances[1] = 50; 

alert(balances.length); 
console.log(balances); 
0

balances關聯數組。 據this後,您可以獲得它的長度,以這樣的方式

Object.size = function(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) 
      size++; 
    } 
    return size; 
}; 

var balances = []; 
balances['kanav'] = 50; 
balances['yash'] = 50; 

alert(Object.size(balances)); 
console.log(balances); 
相關問題