inでbuttonなどのオブジェクトを取得すると

getElementsByTagNameを使い、inでオブジェクトを取得すると
最初はundefinedになり、次が最初のオブジェクトになる。
そういうもんなんだろう、と別に調べもしなかったけど

---------body-------------------
<button id=test-a>a</button>
<button name=test-b>b</button>
<button id=id-c name=name-c>c</button>
<button class=class-e>e</button>

-------script--------------------
var obj = document.getElementsByTagName('button');
var arr = [];
for(var i in obj) arr.push(i);
alert(arr.join('\n'));

上記の場合のiは、0から始まるString型の数字だと思っていたら

length
test-a
test-b
name-c
3

最初はlength、次からオブジェクトのidかnameで
nameとidがある場合、nameが優先された。
idもnameもない場合はindex。
なので、最初のobj[i]はオブジェクトの数を取得できる。
iだけで、idかnameを取得できるとは知らなかった。