在JavaScript中查找数组的长度(大小)

61

我有一个简单的问题,出于某种原因我很困惑。

为什么下面的代码会返回undefined

var testvar={};
testvar[1]=2;
testvar[2]=3;
alert(testvar.length);

编辑 我最初输入了testvar[1].length。我知道这是一个错误。我想说的是testvar.length


你想要实现什么目标?你期望的结果是什么? - Cameron
7个回答

114

因为2不是一个数组, 它是一个数字。数字没有长度。

也许你想写的是testvar.length; 但这也是未定义的,因为对象(使用{ ... }表示法创建的)没有长度。

只有数组有长度属性:

var testvar = [  ];
testvar[1] = 2;
testvar[2] = 3;
alert(testvar.length);    // 3

请注意,JavaScript数组的索引从0开始,并且不一定是稀疏的(这就是为什么结果是3而不是2的原因 -- 有关该数组何时会变成稀疏数组以及何时不会,请参见此答案)。


5

testvar[1]是该数组索引的值,即数字2。数字没有长度属性,您正在检查2.length,这是未定义的。如果您想要数组的长度,请检查testvar.length。


3

整数没有length方法。尝试使用字符串。

var testvar={};
testvar[1]="2";
alert(testvar[1].length);

0
如果 length 未定义,您可以使用以下代码:
function count(array){

    var c = 0;
    for(i in array) // in returns key, not object
        if(array[i] != undefined)
            c++;

    return c;
}

var total = count(array);

-2
obj={};

$.each(obj, function (key, value) {
    console.log(key+ ' : ' + value); //push the object value
});

for (var i in obj) {
    nameList += "" + obj[i] + "";//display the object value
}

$("id/class").html($(nameList).length);//display the length of object.

1
请不要只发布没有任何解释的代码。无论如何,这段代码似乎与最初提出的问题无关。 - tom van green

-2
       var mode = [];
                $("input[name='mode[]']:checked").each(function(i) {
                    mode.push($(this).val());
                })
 if(mode.length == 0)
                {
                   alert('Please select mode!')
                };

1
为什么下面的代码会返回“undefined”? - Wai Ha Lee

-3
var array=[];

array.push(array);  //insert the array value using push methods.

for (var i = 0; i < array.length; i++) {    
    nameList += "" + array[i] + "";          //display the array value.                                                             
}

$("id/class").html(array.length);   //find the array length.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接