那么,为什么这会导致0,我如何找到实际大小?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
答案 0 :(得分:7)
首先,长度为0,因为array
中的项目数为0。
执行此语法array["foo"] = "bar"
时,您将创建一个名为foo
的属性,其值为bar
。由于您尚未向Array添加任何内容,因此长度仍为0,您只需在Array
此处的工作版本:http://jsfiddle.net/VyjJD/3/
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
array.bin = function() { return "bin"; };
array[0] = "bar";
array[1] = "foo";
array[2] = "bin";
array[3] = "bat";
var props = 0;
for (key in array)
props++;
document.write(array.length + "<br />"
+ props + "<br />"
+ (array.foo == array["foo"]) + "<br />"
+ array.bar + "<br />"
+ array.bin());
请注意array.length = 4
但props = 7
,它是数组中所有属性和项目数。
答案 1 :(得分:6)
由于这是一个由属性组成的对象,并采用键/值对的形式(概念上类似于关联数组或哈希表),您必须执行以下操作:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
var size = Object.size(array);
答案 2 :(得分:4)
您正在数组上设置属性,而不是为其提供新元素。与任何其他Javascript对象一样,数组可以接收任意属性。例如:
var foo = [];
foo.bar = 'foobar';
console.log(foo.bar); // outputs 'foobar'
console.log(foo); // outputs [] -- empty array
要将项添加到数组,请使用Array.push
:
var foo = [];
foo.push('foobar');
console.log(foo); // outputs ['foobar']
如果您想要key =&gt;值对,请改为使用对象:
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
答案 3 :(得分:1)
基本上当你做
时
array["foo"] = "bar"
它只是为数组添加了一些属性,这是一个对象。在javascript中,array.foo和array ['foo']的含义相同。
答案 4 :(得分:0)
也许我天真(我的javascript不是它可能是什么),但不应该是这样的:
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
答案 5 :(得分:0)
实际大小为0,因为您没有将任何项放入数组对象 - 这只能通过方法(推送等)或通过为索引属性(或构造函数)赋值来完成。
答案 6 :(得分:0)
如上所述,你不是在处理一个数组而是一个对象。有关如何计算对象中属性的说明,请参阅How to efficiently count the number of keys/properties of an object in JavaScript?。(在问题本身中)。
答案 7 :(得分:0)
Object.keys(阵列)。长度
学分归于伊恩