OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

JavaScript言語のことで・・

  • 暇なときにでも
  • 質問No.239301
  • 閲覧数46
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 62% (115/184)

++ インクリメント(1増やす)ですよね。そうすると、
var i = 1;
i++1;  
(・・・なら、出てくる値が2ということで、だから i は2と解釈するのですか?,でも i は var i = 1; から i = 1 と解釈するのでしょうか?わかりにくくて m(__)m )
それから
var i = 1;
j = i++;
(・・・なら、j =1 と解説してありましたが、1だとしても後ろに++ インクリメントがついているので、出てくる値が2ということになるのではないのでしょうか?、そうすると J はこんな書き方をしなくてもよいのでは・・・?何かこの辺がのみこめません。 j =1, i=2 なのでしょうか?これは講座の中の例に書いてあったものです。)また2増やす時は、++2なのですか?よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル10

ベストアンサー率 61% (70/113)

まず、
i++1
という書き方はおかしいです。i++か、++iと書きます。
これを理解するには、「式の値」という考え方が必要になります。
例えば、3+5の式の値は8、などです。
通常は、計算結果 = 式の値、なのですが、このインクリメント演算子は少し特殊で、
例えばi==1であった場合、i++も++iも計算としては「iに1を加えてiに代入する」ということですが、
式の値は、i++は変更前のiの値(つまり1)、++iは変更後のiの値(つまり2)となります。

従って、i==1の時にj=i++;とした場合、演算子の優先順位に従って次のように解釈されます。
1.演算子の優先順位より、j=(i++);、つまりインクリメント演算子が先に評価されます。
2.i++により、iに1が加えられます。この演算の式の値は、先に述べたように変更前のiの値ですから、1となります。
3.2.の結果により、式はj=1;となりました。
4.この結果、jに1が代入されます。
結局、i==2, j==1となります。

時々、「i++は、他の処理が終わった後、最後に1を加える」という解説を見ますが、間違いですので注意してください。
(とはいえ、この解釈でも問題が起こることは稀ですが)
あくまでも処理の順序としては、i++はjへの代入よりも先に評価されます。
このことは、次のスクリプトで確認できます。
<script>
function foo() {
alert("i=" + i);
return 0;
}
i=1;
j=i++ + foo();
</script>

[出力]i=2

fooの実行途中で(jへの代入が完了していない時点で)すでにiには1が足されています。


また、2を加える場合には、i++を2回実行するか、i+=2を実行してください。
(i++)++という書き方はできません。これはi++の式の値が代入可能でないからです。
お礼コメント
mitsy

お礼率 62% (115/184)

「式の値」と言う言葉が、大変わかりやすく、解釈する糸口になりました。自分に飲み込み易い言葉で書かれていないと、ホントお手上げです。有難う御座いました。
投稿日時 - 2002-03-22 20:11:25
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル2

ベストアンサー率 0% (0/1)

i++; これは、iにi+1を代入するという意味です。 j = i++; これは、jにiを代入してからi++を実行するので、j=1,i=2となります。 j = ++i; これは、i++を実行した後にjに代入するので、i=2,j=2となります。 2を増やす場合は、i += 2;と書けば iにi+2を代入することなります。 ...続きを読む
i++;
これは、iにi+1を代入するという意味です。

j = i++;
これは、jにiを代入してからi++を実行するので、j=1,i=2となります。

j = ++i;
これは、i++を実行した後にjに代入するので、i=2,j=2となります。

2を増やす場合は、i += 2;と書けば iにi+2を代入することなります。
お礼コメント
mitsy

お礼率 62% (115/184)

有難う御座いました。なんとなく分かりかけてきました。
投稿日時 - 2002-03-22 20:13:11


  • 回答No.3
レベル11

ベストアンサー率 21% (84/382)

i=1 は、iと1が同じということではありません。 iに1を代入するということです。 i=i+1 は、右辺の i+1 した結果を iに入れるということになるので、繰り返していけばiの値は増えて行きます。 基本が分かれば数値が2になっても同じなので理解できると思います(^^) ...続きを読む
i=1 は、iと1が同じということではありません。
iに1を代入するということです。

i=i+1 は、右辺の i+1 した結果を iに入れるということになるので、繰り返していけばiの値は増えて行きます。

基本が分かれば数値が2になっても同じなので理解できると思います(^^)
お礼コメント
mitsy

お礼率 62% (115/184)

ありがとうございました。「i=1 は、iと1が同じということではありません。iに1を代入・・」この考え方が非常に勉強になりました。
投稿日時 - 2002-03-22 20:17:28
  • 回答No.4
レベル10

ベストアンサー率 61% (70/113)

=関係の演算子については、 1.a=b bの値をaに代入する。bがオブジェクト参照の場合はaが同じオブジェクトを参照するようにする。 式の値はbの値です(b自身ではない)。従って、a = b = 1;のような記法が可能です。 2.a==b aとbが同じ値かどうかを型変換を含めて判定する。オブジェクト参照の場合には同じオブジェクトを参照しているかどうかを判定する。 判定結果はboolean型。 ...続きを読む
=関係の演算子については、
1.a=b
bの値をaに代入する。bがオブジェクト参照の場合はaが同じオブジェクトを参照するようにする。
式の値はbの値です(b自身ではない)。従って、a = b = 1;のような記法が可能です。
2.a==b
aとbが同じ値かどうかを型変換を含めて判定する。オブジェクト参照の場合には同じオブジェクトを参照しているかどうかを判定する。
判定結果はboolean型。
3.a===b
aとbが同じ値かどうかを型変換をせずに判定する。
判定結果はboolean型。

2と3の違いは、
1 == "1" はtrue
1 === "1" はfalse
です。

なお、下にもかきましたが、#2さんのご回答は、厳密には誤りですので注意してください。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ