質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1149閲覧

Javascriptのオブジェクトについて

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/11/02 06:50

JavaScript

1 var o = {x:1, y:2, z:3}; 2 var a = [], i = 0; 3 for(a[i++] in o)//here 4 document.write(a);

このコードの//hereの代わりに;を入れるとなぜ値がかわるのでしょうか?
詳しく教えていただけたら嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

for文で繰り返す内容は、基本的には{}で囲いますが、
1行だけであれば省略できます。

つまり、

JavaScript

1 for(a[i++] in o)//here 2 document.write(a);

というのは

JavaScript

1 for(a[i++] in o){ 2 document.write(a); 3 }

の括弧の省略された形です。

//hereを;に変えると、意味が変わり、下記のような意味になります。

JavaScript

1 for(a[i++] in o){ 2 //処理なしのfor文 3 } 4 document.write(a);

投稿2015/11/02 07:09

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「//here」後ろに改行がありますが、それが有ってもjavascriptの動作には影響しません。
逆に「;」が入るとそこでそのコマンドの終了を意味します。
前者はこれと同じで

javascript

1for(a[i++] in o){ 2 document.write(a); 3}

※初回に"x"、次に"x,y"、最後に"x,y,z"が出力されて、"xx,yx,y,z"

後者はこれと同じです。

javascript

1for(a[i++] in o){} 2document.write(a);

※完成したaが一度だけ出力されて "x,y,x"

投稿2015/11/02 07:07

編集2015/11/02 09:23
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/02 07:40 編集

初回はx、次は.... で何故その配列になるのでしょうか?
hirohiro

2015/11/02 07:50 編集

最初aは空っぽの配列var a = []。 iは0です  ここにループで処理を行いますが for(a[i++] in o){ document.write(a); } ループの1回目はa[0]にoの一つ目"x"を代入して、その後i+1しますので、この時点でa=["x"], i=1 です。そしてこの時点のaを書き出しています。 ループの2回目はa[1]にoの二つ目"y"を代入して、その後i+1しますので、この時点でa=["x","y"], i=2 です。そしてこの時点のaを書き出しています。
hirohiro

2015/11/02 07:57

for(a[i++] in o) この書き方がややこしいですが var key = ""; for(key in o){console.log(key);} これなら一回目にkeyに"x"が代入されて"x"が書き出されるのをイメージしやすいと思います。 問題のコードはa[i++]に代入してるわけです。
退会済みユーザー

退会済みユーザー

2015/11/02 08:46

最初と次のループはわかりますが、なぜ3回目でxx,yx,zx,y,zになるのでしょうか?
hirohiro

2015/11/02 08:59

すみません。これは私の記述ミスでした。"xx,yx,y,z"ですね。 一回目のループで"x"がブラウザに表示されます。 二回目のループでは"x,y"が追加されブラウザの表示は"xx,y"になります。 ここまでは大丈夫でしょうか? そうすると次も同じように ループの3回目はa[2]にoの三つ目"z"を代入して、その後i+1しますので、この時点でa=["x","y","z"], i=3 です。そしてこの時点のaを書き出しています。 ブラウザ上には"x,y,z"が新たに出力され2回目までの"xx,y"と合わさって、表示は"xx,yx,y,z"となります。
退会済みユーザー

退会済みユーザー

2015/11/02 09:10

一番初めのご回答のxx,yx,zx,y,zは誤りですか?
hirohiro

2015/11/02 09:24 編集

そうです。修正しておきますね。 質問欄に書かれたコードを実行しても"xx,yx,y,z"こうなってました。 "xx,yx,y,z"これになる理屈は前回のコメントの通りです。
退会済みユーザー

退会済みユーザー

2015/11/02 11:09

ありがとうございます!!! これから見かけたら答えてくるとうれしいです!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問