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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

1357閲覧

JavaScript、三項演算子のエラー

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/04/17 16:44

前提・実現したいこと

エラーなく動作を実行したいのですが、なぜエラーが出るのかがわからないのでご教授いただきたいです。

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

Uncaught SyntaxError: Unexpected token ';'

該当のソースコード

var total = document.getElementById('total'); total.addEventListener('click', function(){ total.innerHTML = 'A' + money1 + 'B'; people1.innerHTML = money2 + 'C'; people2.innerHTML = money3 + 'D'; money1 <= money2 ? comment.innerHTML = money2 + 'E': money1 <= money3 ? comment.innerHTML = money3 + 'F': money1 > amount ? comment.innerHTML = 'G': money1 <= amount ? comment.innerHTML = 'H';←このセミコロンでエラーが出ます }, false);

試したこと

var journey = document.getElementById('journey'); journey.addEventListener('click', function(){ result1.innerHTML = money1 + 'A'; result2.innerHTML = money2 + 'B'; total <= amount ? comment.innerHTML = 'C' : comment.innerHTML = 'D';←ここではエラーが出ないです }, false);

いずれも、もともときちんと動作していたif文を書き換えたものです。

このコードではエラーが出ないのですが、三項演算子の右結合?の仕方が間違っているのでしょうか?

よろしくお願い致します。

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

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

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

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

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

otn

2021/04/18 04:13

「三項演算子」n「三項」とは「3つの項」の意味であることが分かっていなかった?
退会済みユーザー

退会済みユーザー

2021/04/18 08:51

では else if を必要とする場合はどのように書けば良いのでしょうか? 右側(false)になったら次に進む、という認識で仰られている3項目に当たる部分に次の条件を指定しています。 他の方の回答で解決しておりますので、確認していただければと思います。
otn

2021/04/18 09:24

なんか誤解があるのでは? A ? B : C ? D : E ? F : G ? H : I は、 A ? B : (C ? D : ( E ? F : (G ? H : I))) ということで、三項演算子は常に三項(条件、真の時の値、偽の時の値)が必要です。
退会済みユーザー

退会済みユーザー

2021/04/18 09:35

すみません理解ができていないのですが、仰られている A ? B : C ? D : E ? F : G ? H : I は、 A ? B : (C ? D : ( E ? F : (G ? H : I))) ということ つまり、 A ? B : C ? D : E ? F : G ? H : I = A ? B : (C ? D : ( E ? F : (G ? H : I))) ということでどっちにしろ同じ動きをする、ということでしょうか?
otn

2021/04/18 09:38

はい。 A + B * C が A + (B * C) と同じだというのと同じ意味でそう書いています(括弧を冗長に付ける)。
退会済みユーザー

退会済みユーザー

2021/04/18 09:56

ありがとうございます。 ということは、私が書いた上のコードには「I」に当たる部分がないので、 「三項演算子」n「三項」とは「3つの項」の意味であることが分かっていなかった? という投稿をされたのでしょうか?
otn

2021/04/18 10:04 編集

はい。そうです。 ちなみに、 「条件Xが真なら、値Y、偽なら値false」という三項演算子のElse部がfalse固定のようなものは、 X && Y と書けます(演算子結合度が三項演算子と違うので組み合わせるなら注意)。 「条件Xが真なら、値Y」とだけ言われると「じゃあ偽の時の値は??」となって式にできません。
退会済みユーザー

退会済みユーザー

2021/04/18 10:08

ありがとうございます。 下の方のご指摘で気付いて修正したのですが、すでに解決した問題に対してのコメントだったのでどのような意図をもって 「三項演算子」n「三項」とは「3つの項」の意味であることが分かっていなかった? という投稿をされたのかがわからず、失礼な返答をしてしまいました。 さらに詳しく教えてくださり、ありがとうございます。 より理解が深まりました。
otn

2021/04/18 10:14

「三項演算子のElse部を書かない」という人は「三項」というのをどう捉えていたのか不思議でならなかったので、知りたくてコメントしました。
guest

回答2

0

三項演算子は condition ? exprIfTrue : exprIfFalse の様に condition が真の場合に評価する式と、偽の場合に評価する式を指定する必要があります。この場合、money1 <= amountが偽になるケースの条件が指定されていないためエラーになっています。該当条件の前にmoney1 > amountが条件になっているケースがあるので、

JavaScript

1 money1 <= money2 ? comment.innerHTML = money2 + 'E': 2 money1 <= money3 ? comment.innerHTML = money3 + 'F': 3 money1 > amount ? comment.innerHTML = 'G' 4 : comment.innerHTML = 'H'; 5 6 //または 7 comment.innerHTML = money1 <= money2 ? money2 + "E" : 8 money1 <= money3 ? money3 + "F" : 9 money1 > amount ? "G" : "H";

これでいいです。

そもそもこのケースだと三項演算子を使うより素直に if 文や swtich 文の方がわかりやすい気がします。

投稿2021/04/17 17:30

draq

総合スコア2577

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

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

退会済みユーザー

退会済みユーザー

2021/04/18 08:47

ありがとうございます。 三項演算子を使うように、と指示が出ていた問題になります。
guest

0

ベストアンサー

最後の三項演算子のelseがないからじゃないでしょうか?

投稿2021/04/17 17:21

kairi003

総合スコア1332

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

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

退会済みユーザー

退会済みユーザー

2021/04/17 17:24

ありがとうございます。 修正したところ、無事にエラーが解消されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問