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

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

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

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

Q&A

解決済

5回答

4442閲覧

JavaScript 変数に1を足すという処理の省略化について(i = i +1 → i+=1 → i++)

tkm0604

総合スコア552

JavaScript

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

0グッド

0クリップ

投稿2020/07/27 23:24

前提・実現したいこと

JavaScript 1を足すという処理の省略化について
変数に1を足す、または1を引くときだけ 1++ や i-- という様に省略した書き方ができると認識しております。

発生している問題・エラーメッセージ

下記コードの様に全てのユーザー情報を表示してみましょう。
というコードの中の

該当のソースコード

var users = [ { name: '太郎', age: 21, nationality: '日本', }, { name: 'リリー', age: 37, nationality: 'イギリス', }, { name: 'ジョン', age: 16, nationality: 'アメリカ', }, ]; for (var i = 0 ; i < users.length ; i++){ var number = i+1 ; console.log(number + "人目"); console.log("名前:" + users[i].name); console.log("年齢:" + users[i].age); console.log("国籍:" + users[i].nationality); }

######var number = i+1 ; という箇所について
var number = i+1 ; は、変数「number」 に 変数「i」 に1を足した物を代入する。 という意味だと思うのですが、
ここを var number = i++ ; とするとループがうまくいきません。

var number = i+1 ; という箇所を var number = i++ ; と省略形で書くと下記内容で出力されてしまいます。

0人目
名前:リリー
年齢:37
国籍:イギリス
2人目

#####var number = i+1 ; という箇所はどうして var number = i++ ; と書き換えることができないのでしょうか?

JavaScript (ES5)

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

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

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

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

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

hentaiman

2020/07/27 23:28

それはconsole.logで内容を確認した上でなお納得いかないから出た質問ですか?それとも未確認ですか?
tkm0604

2020/07/28 05:43

console.log を行い その結果が 0人目 名前:リリー 年齢:37 国籍:イギリス 2人目 ということで、 var number = i +1 と var number = i++ の違いが理解できていませんでしが、解決いたしました。 ご協力ありがとうございました。
guest

回答5

0

ベストアンサー

すこし切り分けて考えましょう
i + 1
という式はiに1を足した値を返します。が、iの値は書き換えていません。
「i + 1」という処理にiの値を書き換える機能は無いわけです
一方
i = i + 1
と書くと、iに1足した値をiに入れ直しているのでiの値が変わりますね
同様に
number = i + 1
と書くと、numberに「iに1足した値」を入れています。
しかし上記の通り「i + 1」の部分にiを変更する機能はないのでiの値は据え置きです

次に
i += 1
i++
という書き方について
これは「i = i + 1」を書き換えたものなのでiの値を変えてしまいます。
つまり
number = i++
ではこの処理でiの値が1増えてしまうことになります。

投稿2020/07/28 00:31

q_sane_q

総合スコア610

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

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

q_sane_q

2020/07/28 00:41

ひとつ追記 number = i++ で一回目が0になるのは、i++だとnumberにiを代入した後でiに1加算されるためです number = ++i だとiが1加算が先でそのあとnumberにiを代入する挙動になります
tkm0604

2020/07/28 05:16

ご丁寧にありがとうございました。 今回のケース var number = 1 +1 というのはi++ ( i = i +1) というという意味ではない。 という説明で理解できました。 そのあとに、ではなぜ 自分が間違えていたコードで最初に 0人と表示されるのかについても追記の説明で理解することができました。 質問して本当に良かったです。 どうもありがとうございました。
guest

0

var number = i+1 ; は、「変数number に 変数i1を足した物を代入」であって、
numberに代入してi=i+1ではないからです。


js

1x = x + 1 2y = x

js

1y = x 2x = x + 1

js

1y = x + 1

は違いますよね。

投稿2020/07/27 23:52

編集2020/07/27 23:57
ozwk

総合スコア13528

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

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

tkm0604

2020/07/28 05:42

「numberに代入してi=i+1」ではないからです。 ここが理解できていませんでした。 ありがとうございます。
guest

0

それするなら、
var number = ++i;
だけど、
iまで+1されてしまうのでそこらへん注意ですな
#このコードでそれしてしまうとやばいです

投稿2020/07/27 23:33

編集2020/07/27 23:35
y_waiwai

総合スコア87774

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

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

tkm0604

2020/07/28 05:41 編集

iまで+1されてしまう。 ここが理解できておりませんでした。 ありがとうございます。
guest

0

ループがうまくいきません。

forfinal-expressioni を インクリメントするようにコードを書かれていますので
for ブロックの最初で i を インクリメントしちゃうと、 iはループを終えた時点で2加算された結果ます。

var number = i+1 ; という箇所はどうして var number = i++ ; と書き換えることができないのでしょうか?

ループ処理としては、前述の通りで、意図した結果になりません。
代入の式として着目すると、i++ への書き換えはできます。

  • MDN 式と演算子でも解説されています。「演算子の優先順位」セクションは特に再確認してください。

投稿2020/07/28 00:15

編集2020/07/28 00:18
AkitoshiManabe

総合スコア5432

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

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

tkm0604

2020/07/28 05:21

ありがとうございます。 自分は演算の優先順位が理解できていないようなので、そこの理解も意識して学習していきます。
guest

0

var number = i+1 ; という箇所はどうして var number = i++ ; と書き換えることができないのでしょうか?

動作が違うからですね。
var number = i++;は、var number = i; i++;と等価です。 numberの値もiの値も異なる。

投稿2020/07/28 00:11

otn

総合スコア84557

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

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

tkm0604

2020/07/28 05:22

var number = i; i++;と等価です。 自分はここがわかっていないようでした。 なんで?と思っていた箇所が理解できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問