配列でのfor文・for-in文
最近までfor-in文はfor文の代わりに使えると思っていました。ですが、どうやらそれぞれ用途が違うようです。簡潔に書くと、
ということに集約されそうです。
for-in文はオブジェクト(連想配列)のプロパティを1つずつとりだしてループする挙動をします。なので各回に参照するのはfor文のように数字等ではなくkey値、つまりStringになります。
なので、for-in文を使って配列内を検索して、条件に合致したもののIndex値を持ってきたいと思っても、実際には文字列になってしまっているので注意が必要です。
配列でもfor-in文が使えるのは、JavaScriptの自動型変換のおかげでしょうか。
(配列Arrayはオブジェクトを拡張したもので、自動的にKey値を0, 1, 2, 3・・・と割り振るためfor-inも使えるとどこかで見たことあるような気がしますが、確かではありません。調査したいと思います)
- for文:配列に使用
- for-in文:オブジェクトに使用
ということに集約されそうです。
for-in文はオブジェクト(連想配列)のプロパティを1つずつとりだしてループする挙動をします。なので各回に参照するのはfor文のように数字等ではなくkey値、つまりStringになります。
var ary = [1,2,3,4,5];
for(var i = 0; i < ary.length; i++){
console.log(typeof(i)); //iはNumberになる
}
for(var j in ary){
console.log(typeof(j)); //jはStringになる
}
なので、for-in文を使って配列内を検索して、条件に合致したもののIndex値を持ってきたいと思っても、実際には文字列になってしまっているので注意が必要です。
配列でもfor-in文が使えるのは、JavaScriptの自動型変換のおかげでしょうか。
(配列Arrayはオブジェクトを拡張したもので、自動的にKey値を0, 1, 2, 3・・・と割り振るためfor-inも使えるとどこかで見たことあるような気がしますが、確かではありません。調査したいと思います)