Safari3 for windows と getElementsByTagName と for…in

結論

  1. いろいろ言われているとおり、配列の走査にはfor(var i=0;i
  2. getElementsByTagName の戻り値は配列とは違う。ブラウザごとにちょっとずつ違う

経緯など

Safari3betaをインストールし自分のサイトを見たところ、正常に動作していないスクリプトがあることに気づきました。

var elements=document.getElementsByTagName("div");
for(var i in elements){
    if(elements[i].className && elements[i].className="hoge"){
       //いろいろ操作
    }
}

IE,Firefox,Operaだと上のようなコードでも希望の動きをします。
iには length なども入りますが、配列の添え字もきちんと入ります。
しかしSafariの場合、変数iには length と item が入るだけで、配列の添え字は入りません。

普通の配列ではどうか確かめてみると、

var arr=[10,9,8];
arr["hoge"]="foo";
for(var a in arr){
    alert(a) // 0,1,2,hoge
}

配列であれば、Safariでも期待した動作をします。