JavaScriptで配列かハッシュかを区別するには?
var obj = ['one', 'two']; // 配列 // もしくは、 // var obj = {'key1':'one', 'key2':'two'}; // ハッシュ if (obj[0]) // 配列 else // ハッシュ
obj を関数の引数として渡した先で、 obj が配列かハッシュかを判断して処理を振り分けるというプログラムを書こうと思い、とりあえず採用したのが上の if 文。ハッシュのキーに '0' は使わないという前提で。
しかし、これではやはり var obj = { '0':'zero' }; の obj を配列と判断してしまうという問題があるので、さっき別の方法を思いついたのが下の if 文。
if (obj.constructor == [].constructor) // 配列 else // ハッシュ
IE7 と Firefox2 でちゃんと動くことは確認したけど、この判定は処理が重いんじゃないかという気がするのは気のせいだろうか。
はてな使ってる人は JavaScript とか詳しい人が多いと思うので、もし他にもっとスマートな方法があれば、どうぞ教えて下さい。