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

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

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

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

Q&A

解決済

2回答

2083閲覧

条件演算子(三項演算子)を使って、3つの場合の条件付けをすることはできますか?

MAYAKO

総合スコア30

JavaScript

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

0グッド

0クリップ

投稿2015/03/18 01:54

MAYAKOと申します。
皆様の回答のおかげでレスポンシブデザインも初心者なりにある程度できるようになり、今週からはJavascriptを勉強していくことになりました。

参考までのリンク⇒※現在使用中の三項演算子の参照先
上記の参照先を見ながら勉強していて、三項演算子は、if文のショートカットということで、非常に便利だと思いました。
しかし、見たところ、真か偽の二つしか条件を組めないようなのですが、三項演算子を使用して、三つの場合に条件付けして値を返すことはできないのでしょうか?

私としては、

var now = new Date();
var greeting = "※ご挨拶※" + ((now.getHours() > 11) ? "こんにちは!" : "おはようございます!");
console.log(greeting);

この条件文に、17時以降は「こんばんは!」という値を返す条件をプラスするだけで式をコンパクトにまとめて記述したいのですが、どのように記述すればよいのでしょうか?
このような場合はif文を使って、else if{~;}の形で追加していくしか方法はないのでしょうか?

三項演算子でもできるよ!という場合はそのコード例を示していただけると助かります。
teratailユーザーの皆様、ご回答どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

maisumakun さんの回答の補足ですが、条件演算子はインデントと改行をふつうにすればそれなりに読みやすくなります。

lang

1var greeting = 2 now.getHours() > 16 ? 'こんばんは!' : 3 now.getHours() > 11 ? "こんにちは!" : 4 "おはようございます!"; 5greeting = "※ご挨拶※" + greeting ;

投稿2015/03/18 05:24

編集2015/03/18 05:29
hello-world

総合スコア1342

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

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

MAYAKO

2015/03/18 05:34

hello-world様 捕捉回答をしていただきまして、ありがとうございます。 インデント(おそらくタブ)と改行についてですが、これは途中に\tと\nを挟まなくても補問題なく動作するでしょうか? ※\マークはバックスラッシュを日本語入力した場合の表示になります。
hello-world

2015/03/18 05:43

はい。\nや\tをはさむ必要はありません。 私が申し上げたいのは、条件演算子であってもif文であっても、適切にフォーマットすれば読みやすくそうでなければ読みづらいということです。
MAYAKO

2015/03/18 05:49

ご返答ありがとうございます。 HTML、CSSに加え、Javascript……と、ただでさえ膨大なコードを打つ以上、自分が「読みやすいように適度に文の見た目も整えていくこと」が大事ですね。 これからもっと難しく、複雑な構文が出てくると思いますが、頑張ります。 hello-world様、改めてご回答ありがとうございました!
guest

0

ベストアンサー

いちおう、三項演算子を複数組み合わせることもできます。

var greeting = "※ご挨拶※" + ((now.getHours() > 16) ? 'こんばんは!' : (now.getHours() > 11) ? "こんにちは!" : "おはようございます!");

ただ、条件が増えるものを三項演算子で書くと読みづらいので、(状況的にどうしても1文で書く必要がある場合でなければ)ifを使ったほうが読みやすいでしょう。

投稿2015/03/18 01:59

maisumakun

総合スコア145183

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

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

MAYAKO

2015/03/18 02:12

maisumakun様、早速のご回答ありがとうございます。 速攻でご回答いただいて、驚いています。 なるほど、三項演算子で複数(3つ以上)の条件を付けると、入れ子の入れ子のさらに入れ子……という形になるわけですね。 確かに、実際にコードを打つ上ではどこまでが条件なのかわかりにくくなるので、if文にした方がよさそうですね……自分でも打ってみましたが、()の位置関係がわかりにくかったです。 勉強になります。ありがとうございます! それでは、早速、maisumakun様の回答をベストアンサーにさせて回答を締めさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問