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

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

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

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

Q&A

解決済

3回答

2049閲覧

JavaScriptのif文内でor条件を使用するときの括弧の扱いについて

takochan1192

総合スコア100

JavaScript

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

1グッド

0クリップ

投稿2022/04/15 01:53

編集2022/04/15 02:15

if文の条件内でor条件を使用するとき
下記のようなコードでは、常に条件式がtrueになってしまうため
求めている挙動にならないということは理解しました。
参考サイト

js

1if (x === 5 || 7 || 10 || 20) { 2 // コードを実行する 3}


複数のor条件の場合はこのような書き方でないといけない
ことはわかりました。

js

1if (x === 5 || x === 7 || x === 10 ||x === 20) { 2 // コードを実行する 3}

では、xは同じなので下記の書き方ならどうだろうと思い
コードを作成してみました。
※実行環境はTypeScript playgroundです。

ts

1let x = 7 2 3const y = (x: number) => { 4 if (x === (5 || 7 || 10 || 20)) { 5 console.log('number match!') 6 return 7 } 8 console.log('not match!') 9} 10y(x)

出力結果は"not match"でした。
or条件の時に中括弧では、条件とマッチせずに
出力結果が"not match"となってしまうのは
なぜでしょうか。
どなたか詳しい方ご教示いただけますと幸いです。

退会済みユーザー👍を押しています

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

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

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

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

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

int32_t

2022/04/15 02:04

「中括弧」とはふつう {} のこと指すと思います。
takochan1192

2022/04/15 02:16

おっしゃる通りです。失礼致しました。 修正致します。
guest

回答3

0

ベストアンサー

js

1if (x === 5 || x === 7 || x === 10 ||x === 20) {

これでいいので、このように書いてください。どうしても x を繰り返すのが納得できないなら、

js

1if ([5, 7, 10, 20].includes(x)) {

です。


js

1 if (x === (5 || 7 || 10 || 20)) {

a || b というのは 「atrueに評価されるときは a、そうでなければ b」という意味です。よって、(5 || 7 || 10 || 20) というのは(数値は0以外がtrueなので) 5 と同じ意味です。

投稿2022/04/15 02:01

int32_t

総合スコア21927

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

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

takochan1192

2022/04/15 02:17

なるほど、という事はif文内はx===5となるので、not matchが出力されていたのですね。 ありがとうございました。
guest

0

下記の書き方ならどうだろうと思い

x === (5 || 7 || 10 || 20)は、カッコ内の5 || 7 || 10 || 20が先に処理されて5となり、x === 5 と同じ意味になります。

投稿2022/04/15 02:18

maisumakun

総合スコア146536

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

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

takochan1192

2022/04/15 02:21

なるほど優先順で左から順に判定されていたのですね。 ありがとうございます。
guest

0

演算子の優先順位 - JavaScript | MDN

  • 厳密等価 (===)は優先度9
  • 論理 OR (||)は優先度4

つまり
x === 5 || 7 || 10 || 20

((((x === 5) || 7) || 10) || 20)
ということですね
条件式||は前の式がtrueになった時点で評価をやめる(前のtrue値を優先する)ので
仮に、xが5ではないときは7、xが5のときはtrue
を返すためxがどんな値であってもつねにtrueと判断されます

投稿2022/04/15 02:16

編集2022/04/15 02:27
yambejp

総合スコア117622

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

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

takochan1192

2022/04/15 02:22

非常に分かりやすく、ご回答いただきありがとうございます。 なるほど、括弧などを付けて追ってみると 私でも分かりやすく理解できました。 参考サイトもありがとうございます。 勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問