• ベストアンサー

for each for in

Javascript初心者です。 for each とfor inの違いを調べているのですが、どれもオブジェクトのプロパティを取る というぐらいしか理解できていません。 お手数ですが、具体的な違いや使い方など教えていただけないでしょうか? よろしくお願いします。

noname#191255
noname#191255

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

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

"for each" というと、Mozilla の JavaScript1.6 で追加された独自仕様の構文でしょうか https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for_each...in この構文はリンク先の説明によると「ECMA バージョン」が「なし」とされているので、 firefox 系統でしか使えないローカル仕様となります。 なので一般的に使用するのはおススメできません。 それは兎も角として 簡単に言えば、オブジェクトの各プロパティを繰り返し処理するのに 「名前」を使うのが "for in" 「値」を使うのが "for each" 例 var obj = { "愛":"それは甘く", "我が名": "オスカル" }; for (var 名前 in obj){ alert(名前) } // 「愛」と「我が名」を表示 for each (var 値 in obj){ alert(値) } // 「それは甘く」と「オスカル」を表示 // for each 構文を代替するおススメの記述 for (var 名前 in obj){ alert(obj[名前]) } // 「それは甘く」と「オスカル」を表示

noname#191255
質問者

お礼

ご回答ありがとうございます。 とても分かりやすく助かりました。

関連するQ&A

  • Eachについて

    Eachの使い方を以下のように理解しているのですが正しいでしょうか? make a red object for each bule object. 一つの赤いオブジェクトをそれぞれのブルーオブジェクト(複数)のためにつくりなさい。 つまり赤、青ともに複数あり、赤と青は1対1になる。 make red objects for each bule object. 複数の赤いオブジェクトをそれぞれのブルーオブジェクト(複数)のためにつくりなさい。 つまり赤、青ともに複数あり、赤と青は多対1になる。 make a red object for each bule objects. eachのあとは複数形にならないので文法的に間違い。

  • コレクションクラスに対してFor Eachを使えるようにするには

    コレクションクラスの持つアイテムを For Each ・・・ Next でぶん回す方法を教えてください。 昔、本に載っていたのを見たのですが、 どーーーーーしても思い出せません! たしか、プロパティを1こ追加して、 object.[_Enum]のような行を追加していたような・・・ よろしくお願いします!

  • セルに対してFor Each~In~Nextを使う

    セルに対してFor Each~In~Nextを使う事は出来ない? シートやブックに対してループする時は Sub aaa() Dim w As Worksheet For Each w In Worksheets MsgBox w.Name Next End Sub 等を使いますが、 A1に「あ」 A2に「い」 A3に「う」 が入っている場合、 Sub bbb() Dim i As Long For i = 1 To Range("a65536").End(xlUp).Row MsgBox Cells(i, 1) Next End Sub で、全ての値を取得できますが、 For~to~nextではなく セルに対してFor Each~In~Nextを使う方法があれば教えてください。 上記のように Dim w As Worksheetは宣言できますが Dim c As Workcellとはできませんでした。 なぜわざわざFor~to~nextでできる事をFor Each~In~Nextでやりたいかと言うと、 シートやブックはFor~to~nextでできるのに、セルはFor~to~nextができない理由を知りたいからです。 ご回答よろしくお願いします。

  • for...inのプロパティ取り出し順序について

    Javascriptを勉強中の初心者です。 以下はfor...in文を使ってオブジェクトに含まれるプロパティを 順に取り出して出力するスクリプトです。 var personal = { name:'山田', old:20, address:'北海道', email:'yamada@example.com' } document.write("<p>"); for(var pname in personal){ document.write(pname + " : " + personal[pname] + "<br />"); } document.write("</p>"); 参考書には、for...in文の注意点として 『どのような順序でプロパティが取り出されるか 決まっていないし指定もできない』と書いてありました。 しかし何度実行してもオブジェクト personal で 指定したどおりの順序(name、old、address、email)で出力されます。 どのプロパティから取り出されるか決まっていないのであれば 出力結果の順序がバラバラになるはずなのでは? 私が意味を取り違えているのでしょうか。 お詳しい方、どなたか理由を教えてください。 よろしくお願いします。

  • For Each ~ Next の動作

    コレクションの操作をするときなどに、 For tmp in testCol   List1.Add tmp Next ってな感じでFor Each文をつかいますよね。 あれって、 For i = 0 To testCol.Count   List1.Add testCol.Item(i) Next i と書くのに比べ、びっくりするほど処理が速いですよね。 いったい、どんな違いがあるのでしょうか。

  • For Each Nextにつきまして

    Dim a As Chart  For Each a In Charts   a.Delete  Next a Setステートメントを用いないという事は、aはすべてのグラフシートが代入されている事になりますか。しかしeachという事は、結局二行目で行っているのは、全グラフシート中の一枚の確認…ですか?グラフシートを一枚ずつ確認して、一枚ずつ削除しているのですか? またグラフシートが一枚も無い状態でもエラーが起きないのはなぜ? 無ければ、For Each~Next内の処理が実行されないのですか。 宜しく、お願いします。

  • ユーザーフォーム上でFor Each~Next?

    Excelユーザーフォームでマルチページを使用しているのですが テキストボックスに文字(パスワード的なもの)を入力したら マルチページ内の特定ページのコントロールをenabled=trueにしたいのです(通常はenebledがtrue・falseの混合ページです) 先日よりFor Each~Next構文を使い始めたのですが勉強不足『オブジェクト・コレクション』の概念がいまいち理解できません。よろしくお願いします。 ネット上で調べてコピペしたのですがこのままだと他のページ、ページ外のコントロールまで影響するので良い方法をアドバイスしていただけますか?やはりコントロール個別にコードを書くしかないのでしょうか? Private Sub TextPASS_Change() If TextPASS.Value = "aaaa" Then For Each Control In Controls 省略(enabled=true) Next Else For Each Control In Controls 省略(enabled=false) Next End If End Sub

  • for / in the last ...

    for the last two weeks と in the last two weeks の違いが今ひとつわかりません。 forだとその期間ずっとですから、 「この2週間ずっと・・・」ですよね。 inだと同じくこの2週間ずっとであっても 変化があるときのように思えます。 「この2週間上がり続けている」なら in で、 「この2週間ずっと同じだ」なら in / for どちらもOKでしょうか。 「この2週間でもっとも」なら in のみOKですか。 「この2週間彼に会っていない」ならこれは for でしょうか。 こんな理解をしています。もう少しすっきりする説明があればお願いします。

  • マクロFor Each ~ In Nextについて

    いつも回答して頂き感謝しています。 下記のマクロで列を一つづつとばしながら繰り返し処理したいのですがどうすればよろしいでしょうか? For Each h In .Range(.Range("C3"), .Range("IV3").End(xlToLeft)) Set s = Worksheets(h.Value) Next End(xlToLeft))の後ろに Step 1 を入れたらOKと思ったのですが、エラーがかかるので違うみたいです。さっぱりわかりません。御指導の程宜しくお願い致します。

  • for each で扱えるコレクションの実装

    こんにちは。 プログラムの保守を請け負っているのですが、独自に実装されているリストクラスがありまして、 それをfor eachで操作できるようにとの指示がありました。 処理系はC++です。 CFooArrayというクラスだとしまして、内部にCFooDataというクラスをdequeで持っています。 要望としては CFooArray arrayFoo ; for each( CFooData fooData in arrayFoo ) { } とできるようにしてほしいとのことですが、そもそもfor eachで扱えるコレクションクラスを どう実装していいのかが分かりません。またdequeを外に出すのはナシと言われました。 どなたかご存じの方がいらっしゃいましたら教えていただけないでしょうか。 参考サイトでも紹介していただければ幸いです。

専門家に質問してみよう