javascript勉強中の初心者です。
あまり気にしないのでいいのかもしれませんが、配列をin演算子で回した時の挙動がとても気になります。
js
1const obj = {1:1,2:2,3:3,4:4,5:5}; 2const _c = v => { console.log(v) }; 3 4for(let i in obj){ 5 _c(typeof(i)); //=>string*5 6 _c(obj[i]); //=>1,2,3,4,5 7}
当たり前ですが、objの中身を上記のコードで取れますよね。
疑問なのは次のような時で、以下のような時もobjの値がとれてしまいます。
js
1const obj = [1,2,3,4,5]; 2const _c = v => { console.log(v) }; 3 4for(let i in obj){ 5 _c(typeof(i)); //=>string*5 6 _c(obj[i]); //=>1,2,3,4,5 !?!?!?!??!?!?!? 7}
この場合iはstringなので
**iが1の場合はobj['1']となり、objは連想配列ではないので取れないはずでは?**と思うのですが・・・
暗黙の型変換が行われていると言う一言に尽きるのかもしれませんが、
一体どうなってるんでしょうか?
どなたかお教えてくださいm(_)m
追記です 14:00
hoshiさん、mさんご回答ありがとうございます。
ドキュメントはMDNの
・Array
・String
・for
・in
・for...in
に目を通しています。
が、Arrayのページを見ると私の理解通り
配列は(連想配列のように)要素のインデックスに文字列を使うことはできず、整数を使う必要があります。
と書かれており、では何故、配列なのにstringでアクセスでてきるのか?と言うのが謎なのです。
in演算子の仕様?Stringの仕様?forの仕様?それともjavascript自体の仕様?
何なのかはよく分かりませんが、気になりすぎたので質問させていただきましたm(_)m
