【发布时间】:2011-01-07 16:42:48
【问题描述】:
那么,为什么这会导致 0 以及如何找到实际大小?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
【问题讨论】:
标签: javascript
那么,为什么这会导致 0 以及如何找到实际大小?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
【问题讨论】:
标签: javascript
首先,长度为 0,因为 array 中的项目数为 0。
当您执行此语法array["foo"] = "bar" 时,您将创建一个名为foo 的属性,其值为bar。长度仍然为 0,因为您没有向 Array 添加任何内容,您只是在 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 是数组中的所有属性和项目数。
【讨论】:
由于这是一个对象,它由属性组成,并采用键/值对的形式(在概念上类似于关联数组或哈希表),因此您必须执行以下操作:
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);
【讨论】:
getSize(var);
array.foo,而不是array["foo"]。这就是长度属性不起作用的原因。他在数组对象上设置属性,而不是向数组中添加项目。
您在数组上设置一个属性,而不是给它一个新元素。数组可以接收任意属性,就像任何其他 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=>value 对,请改用对象:
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
【讨论】:
基本上当你这样做时
array["foo"] = "bar"
它只是为数组添加了更多属性,这是一个对象。在 javascript 中,array.foo 和 array['foo'] 含义相同。
【讨论】:
也许我太天真了(我的 javascript 不是它可能的样子),但它不应该是这样的吗:
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
【讨论】:
实际大小为 0,因为您没有将任何项目放入数组对象中 - 这只能通过方法(推送等)或通过将值分配给索引属性(或在构造函数中)来完成。
【讨论】:
【讨论】: