只有当数组包含与索引相关联的元素时,才能使用length属性。如果它是关联数组,则length属性将返回0。您可以使用以下代码自行计算元素:
function len(arr) {
var count = 0;
for (var k in arr) {
if (arr.hasOwnProperty(k)) {
count++;
}
}
return count;
}
len(mappings)
来计算“mappings”数组的元素数量。JavaScript数组与PHP中的关联数组不同。然而,由于JavaScript的动态特性以及Array是Object的子类,您仍然可以在Array上附加任意属性。但是,length属性不会反映这一点(正如您已经发现的那样)。
如果您正在使用较新的浏览器/ polyfills(例如core-js),我建议改用Map(文档)。否则,请使用简单对象({}),并在对象上使用Object.keys获取键。
后者的示例:
var mappings = {};
mappings['foo'] = 'bar';
Object.keys(mappings); // returns ['foo']
mappings[Object.keys(mappings)[0]]; // returns 'bar'
// Loop through all key-value pairs
Object.keys(mappings).forEach(function(key) {
var value = mappings[key];
// Do stuff with key and value.
});
length
属性表示一个整数,该整数大于数组中的最高索引。
length属性表示一个无符号32位整数,始终比数组中的最高索引数字要大。
当您将非整数键分配给数组时,最高索引仍然是0
。
var arr = [];
arr['abc'] = 1;
console.log(arr.length); //0
arr[100] = 2;
console.log(arr.length); //101
Object.keys(object.mapping).forEach(do something)
。 - The Reason