51

I think I'm going crazy. I have a simply question that I'm struggling with for some reason.

Why does the below return 'undefined'?

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

edit I originally typed testvar[1].length. I knew this to be an error. I meant testvar.length

Adrian Lynch
  • 7,817
  • 2
  • 29
  • 39
Ed.
  • 4,209
  • 10
  • 56
  • 78

7 Answers7

98

Because 2 isn't an array, it's a number. Numbers have no length.

Perhaps you meant to write testvar.length; this is also undefined, since objects (created using the { ... } notation) do not have a length.

Only arrays have a length property:

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

Note that Javascript arrays are indexed starting at 0 and are not necessarily sparse (hence why the result is 3 and not 2 -- see this answer for an explanation of when the array will be sparse and when it won't).

Community
  • 1
  • 1
Cameron
  • 91,868
  • 20
  • 192
  • 220
5

testvar[1] is the value of that array index, which is the number 2. Numbers don't have a length property, and you're checking for 2.length which is undefined. If you want the length of the array just check testvar.length

mVChr
  • 48,301
  • 11
  • 105
  • 100
2

Integer has no method length. Try string

var testvar={};
testvar[1]="2";
alert(testvar[1].length);
Dim_K
  • 561
  • 2
  • 15
0

If length is undefined you can use:

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);
Douwe de Haan
  • 5,424
  • 1
  • 28
  • 40
RafaSashi
  • 15,412
  • 8
  • 78
  • 89
-1
       var mode = [];
                $("input[name='mode[]']:checked").each(function(i) {
                    mode.push($(this).val());
                })
 if(mode.length == 0)
                {
                   alert('Please select mode!')
                };
kush
  • 439
  • 4
  • 7
-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.
Douwe de Haan
  • 5,424
  • 1
  • 28
  • 40
Tanmaya
  • 1
  • 1
  • Please don't just post code without any explanation. Anyway, this code does not seem to have anything to do with what was beeing asked in the first place. – tom van green Aug 10 '18 at 12:37
-2
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.
Ashley Mills
  • 44,005
  • 15
  • 120
  • 151
Tanmaya
  • 1
  • 1