• ベストアンサー

for in文のkey取得できない

for (var key in hogeobject) { if(key <= 10) {        alert("1" + key); switch (key){       alert("2" + key); このようなソースを書きました。 alert("1" + key); は表示されますが alert("2" + key); は表示されません。 どのようにkeyの値を渡せばよいのでしょうか。 スコープの概念がわかっていないと思います。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

なんとなく問題が分かりました。 JavaScript における for-in 句で取得できるキーは、 仕様書を読む限り "the name of the next property" となっています。 つまりキーは文字列型に変換される、と読み取れます。 実際に確認しましたが、for-in 句は必ず string 型を 取得するようです。 というわけで、 // 比較演算子は、型の自動変換を行うのでOK if ('8' <= 10) // switch句は、厳密な比較(===)を行うのでNG switch('8'){ case 8: ... } // parseIntすれば、number型で同じ値なのでOK switch(parseInt('8')){ case 8: ... } 余談ではありますが 型の自動変換に頼った比較演算をするプログラミングは、 いずれ必ず間違いの元になりますのでご注意ください。

uewouuc73jmmdjd
質問者

お礼

Ogre7077さんご回答ありがとうございます! お礼が遅れまして誠に申し訳ありません。 ご指摘の通り型の概念の理解を深めたいと思います。 英語の原文が読めるのもすごいですね。 英語も勉強しておりますがなかなか難しいです。 いろいろとアドバイスありがとうございました。 またよろしくお願いいたします。

その他の回答 (1)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

よくわかりませんが、こういう事でしょうか var hogeobject = { '8':'エイトマン' }; for (var key in hogeobject) { if(parseInt(key) <= 10) { alert("1" + key); switch (key) { case '8': // switch には case ラベルが必要 alert("2" + key); break; // case には対として break が必要 } // switch句の末尾に閉じ大括弧が必要 } // if句の末尾に閉じ大括弧が必要 } // for句の末尾に閉じ大括弧が必要

uewouuc73jmmdjd
質問者

お礼

Ogre7077さん、ありがとうございます! parseIntを加えたらswitchのkeyが参照できました。 整数に変換しないとダメなんですね? ifは問題なく取得できるのに・・・ 原因はなんでしょうか。。。 閉じ括弧の件失礼致しました。 正確に書かないとわかりづらいですね>o<; 助かりました!ありがとうございました!

関連するQ&A