如何查找文字数组的长度?

Man*_*tar 9 javascript

那么,为什么这会导致0,我如何找到实际大小?

var array = [];
array["foo"] = "bar";
array["bar"] = "foo";

document.write(array.length);
Run Code Online (Sandbox Code Playgroud)

hun*_*ter 7

首先,长度为0,因为项目数array为0.

当您执行此语法时,array["foo"] = "bar"您将创建一个名为foovalue的属性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());
Run Code Online (Sandbox Code Playgroud)

请注意,array.length = 4但这props = 7是Array中的所有属性和项目数.


kar*_*m79 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);
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/gBG34/

  • 在JS中没有关联数组这样的东西.它是一个对象,只是一种替代语法来访问它的属性.而不是`array ["foo"]`你也可以写`array.foo`.这就是长度属性不起作用的原因.他在数组对象上设置属性而不是向数组添加项. (3认同)