我有一個包含子數組的父數組。父數組上的length
屬性顯示0個結果,即使存在子數組時也是如此。即使它包含值,Array.length也是0 - Javascript
下面的代碼:
var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;
alert(balances.length);
console.log(balances);
是什麼原因?
我有一個包含子數組的父數組。父數組上的length
屬性顯示0個結果,即使存在子數組時也是如此。即使它包含值,Array.length也是0 - Javascript
下面的代碼:
var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;
alert(balances.length);
console.log(balances);
是什麼原因?
的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
同意@RobG。 [JSFiddle供參考](http://jsfiddle.net/RajeshDixit/1cvyjha6/7/) – Rajesh
在您的示例中,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);
您正在使用陣列作爲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);
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);
請有關[MCVE]代碼添加到你的問題;不要只鏈接到一個熱量資源。 –
「長度」屬性被定義爲最高索引加1,如果它不包含任何索引則定義爲0。這些屬性不算作指數。 – Xufox
@ Xufox-不完全是,*長度**是**至少**最高指數加1。它可以更高(例如'var a = new Array(8)'。 – RobG