- ベストアンサー
Javascriptについて質問です
- Javascriptについて質問です。for in文の動きと、引数を指定せずに動作する関数について教えてください。
- 詳細な内容は質問文章を参照してください。質問1では、for in文がオブジェクトのプロパティを順番に取得するものであることを説明しています。質問2では、関数に引数を指定しない場合でも動作する理由について説明しています。
- 質問3では、for in文の中でiを定義することについて疑問を持っています。私たちは、friendsオブジェクトに関連する変数を定義していないため、変数iがマッチしないと思っています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 質問3についてですが、friends[key].firstNameが何を表しているのか分からないです。 > 例えば、friends.fistNameではだめなんですか? friends には「steve」と「bill」の2つのオブジェクトが入っていますが、「fistName」というプロパティは入っていないので「friends.fistName」は存在していません(undefined になります)。 friends の中の steve の fistName、friends の中の bill の fistName をそれぞれ取り出したいのだからfriends["steve"].firstName、friends["bill"].firstNameを指定しなければいけません。 for (var key in friends) で key に「steve」と「bill」を順に入れているので friends[key].firstName で目的の値を取り出せるのです。
その他の回答 (2)
- y_shimizu
- ベストアンサー率41% (27/65)
まず、friendsについてですが、 friendsはsteveとbillを、 steveとbillはfirstNameやlastName等を持っています。 そしてsteveのfirstNameには"Steve"が、billのnumberには"080"が入っている、 ということを表しています。 つまり、キー名: 値 という形をネストしているということです。 for ( var key in object ) についてですが、 これはそのobjectが持っているキー名を順次keyに入れていくループ書式となります。 従って、 質問1はfriendsが持っているキー名、すなわちsteveとbillの2回ループすることになり、ループのiには"steve"や"bill"がそのまま入ってくることになります。 質問2は呼び出し元がわからないので割愛します。 質問3はオブジェクトのアクセスの仕方に対する理解を得たいのだと思います。 例えば、firendsのbillのnumberである"080"が参照したい場合、どのようにするのか、ということです。 "080"を取得したい場合、 friends.bill.number で取得できますが、 friends["bill"]["number"] でも取得できます。 もちろん組み合わせて friends.bill["number"] としても取得できます。 なので、for( key in friends ) で"steve"や"bill"がkeyに設定された場合、friends[key]とすればfriends["steve"]となってsteveにアクセスできるわけです。 JavaScriptのオブジェクトとは全て配列でその配列はインデックスにStringが使用できる、とでも考えるとわかりやすいと思います。(厳密には違いますが・・・)
お礼
ありがとうございます。
- int3
- ベストアンサー率34% (65/190)
実行結果をだすにあたって実際に関数をコールしているところを書かないと答えられないと思いますよ。 質問1 : friendsのプロパティキーを列挙してます。なのでキー名のsteve, billがでます。 質問2 : 何もわたしてないなら思ったようにうごかないですよね。呼び出し元をかかないとわからないです。 質問3:iが定義されてないしなにがいいたいのかよくわからないです。もうちょっと詳しくかいたほうがいいと思います。
補足
回答ありがとうございます。 質問3についてですが、friends[key].firstNameが何を表しているのか分からないです。 例えば、friends.fistNameではだめなんですか? 実行結果としては、friends内のfirstnameが表示されるのでしょうか? var search = function(name) { for (var key in friends) { if(friends[key].firstName== name){ console.log(friends[key]); return friends[key]; }
お礼
ありがとうございます。