配列の各要素を参照するときにhoge["0"]ってアリなの?
配列のインデックスに用いられるのはnumberだけだと思ってたのですが…
試してみたら↓のようにhoge["0"]でもきちんと出力されたのです。
var hoge = ['foo', 'bar', 'baz']; hoge[0]; //foo hoge["0"]; //foo
インデックスはnumberじゃなくてもstringでもおkなのですか?
そもそもなんでこんなことしようとしたのかというと
だいぶ簡略化してますが↓みたいなのを書いていました。
var hoge = ['foo', 'bar', 'baz']; var fuga = function(value) { var num = (function(){ for (var i = 0; i < hoge.legnth; i++) { if (hoge[i] == value) return i; }; })(); if (typeof num == 'number') { alert("もう" + hoge[num] + "は" + (num + 1) + "番目にあるよ!!"); } else { hoge.push(value); alert(value + "を追加したよ!!"); }; }; fuga("foo"); // alert("もうfooは1番目にあるよ!!")
関数fuga()になにか値(value)を渡して配列hogeの中の各要素と照らし合わせて、
- すでにあったらnumにその順番を、
- なかったらnumは'undefined'なままで、
今度はnumのtypeofを見て
- 'number'だったらすでにある旨をalertする、
- 'number'じゃなかったら配列hogeに値を追加してその旨をalertする。
ただ、これを作ったときに間違えて、
//if (typeof num == 'number') { if (num) {
ってしちゃってて、numが0のときfalseだったのでbugってたのです。
で、numがstringなら0も"0"だからtrueでおkなんだよなーって思ったので試してみた次第です。