1. 公開中で閲覧数 120 ならバッジを出す
  2. 閲覧数ちょうど 100 でもバッジを出す
  3. 閲覧数 99 では足りない
  4. 非公開で閲覧数 0 でも本人ならバッジを出す
  5. 引数を渡さず undefined なら出さない
コース一覧
JavaScript入門:コードを動かす
演算子の優先順位

JavaScript入門:コードを動かす

HTML に JavaScript を読み込むところから始め、コンソール、文字列と数値、let と const、データ型、型変換、比較・論理・三項・null 合体演算子を学ぶ全 23 レッスン(335 分)の入門コースです。最後は、変数と式を使ってプロフィールの見出し用の値を組み立てます。if 文、配列とループ、DOM 操作は後続コースで扱います。

1
はじめての JavaScript
01. HTML に JavaScript を読み込む5分
02. console.log で表示する15分
03. 文字列を連結する15分
04. 四則演算15分
05. コメントで意図を残す15分
06. エラーを読んでみる15分
07. つくる 起動メッセージ20分
08. 第1章まとめクイズ10分
2
変数とデータ型
01. let と const を使い分ける15分
02. typeof で型を調べる15分
03. 型を変換する15分
04. 真偽値と falsy な値15分
05. null と undefined を見分ける15分
06. テンプレートリテラル15分
07. つくる プロフィールを変数にする20分
08. 第2章まとめクイズ10分
3
演算子と式
01. 比較演算子と ===15分
02. 論理演算子と短絡評価15分
03. 三項演算子で簡潔に15分
04. ?? で既定値を用意する15分
05. 演算子の優先順位15分
06. つくる 表示名を決める20分
07. 第3章まとめクイズ10分

演算子の優先順位

解説

このレッスンで分かること

  • 演算子には強さの順序があり、&& は || より先に評価されます
  • 迷ったら丸括弧を書きます。実行結果は同じでも、読む速度が変わります

同じ 1 行が 2 通りに読めてしまう

算数の 2 + 3 * 4 が 20 ではなく 14 になるのと同じで、JavaScript の式も演算子ごとに強さが決まっています。強いものから順にまとまりを作りながら評価されます。

JavaScript

console.log(2 + 3 * 4); // 14 掛け算が先 console.log((2 + 3) * 4); // 20 括弧が最優先

比較や論理演算子が並ぶと、算数の直感が効かなくなります。プロフィールサイトの表示条件で見てみます。

JavaScript

const hasPhoto = true; const likes = 40; const isPinned = true; console.log(hasPhoto && likes >= 100 || isPinned); // true

この式は「写真があって、かついいねが 100 以上、または、ピン留めされているなら真」と読めます。ただしそう読めるのは、&& が || より強いと知っている人だけです。知らない人は「写真があって、かつ、いいねが 100 以上またはピン留め」と読むかもしれません。同じ文字列から 2 通りの意味が読み取れてしまう、というのが問題です。

覚えるのは 3 行だけ

優先順位の一覧は長いのですが、日常で効いてくるのは次の 3 つです。

  • 算術は比較より強い。likes + 10 >= 100 は (likes + 10) >= 100 と解釈される
  • 比較は論理より強い。likes >= 100 && hasPhoto に括弧は要らない
  • && は || より強い。a && b || c は (a && b) || c と解釈される

JavaScript

console.log(false && false || true); // true (false && false) || true console.log(false && (false || true)); // false 括弧で結果が変わった

同じ並びでも、括弧の位置で結果が変わります。&& が先だと知らなければ、この違いに気づけません。

解説

順序は「算術 → 比較 → 論理」で、論理の中では && が || より先です。算数で掛け算を先に計算するのと同じ並びだと思うと覚えやすいですが、返る値まで算数と同じではありません。1 || 1 は 2 ではなく 1 です。

括弧は読む人のために書く

優先順位を暗記していれば括弧は省けます。しかし省いたコードは、読む人にも同じ暗記を要求します。3 か月後の自分を含め、読む人はたいてい急いでいます。

JavaScript

// 動くが、読み手に優先順位の暗記を要求する const canPin = hasPhoto && likes >= 100 || isPinned; // 意図が一目で分かる const canPinClear = (hasPhoto && likes >= 100) || isPinned;

実行結果はまったく同じで、速度の差もありません。違うのは読む速度だけです。レビューで「この括弧は要らない」と言われることはほとんどありませんが、「ここは括弧が欲しい」はよく言われます。迷ったら書く、で問題ありません。

他人の書いた長い式を読むときも手順は同じです。まず算術と比較のまとまりに頭の中で括弧を付け、次に && のまとまりを括弧でくくり、最後に残った || を左からつなぎます。読み解いた括弧をそのままコードに残しておけば、次に読む人の手間も省けます。

返す値の型をそろえる

&& と || が返すのは真偽値ではなく、判定に使った値そのものです。 isPinned に文字列が入っていれば、式全体もその文字列を返します。

JavaScript

const isPinned = "yes"; console.log(false || isPinned); // yes 文字列がそのまま返る console.log(Boolean(false || isPinned)); // true 真偽値になる

真偽を返すつもりの関数なら、式全体を Boolean() で包んでおくと、 呼んだ側が受け取る型が揺れません。包む位置は式の外側です。

よくある間違い

  • ! の作用する範囲を勘違いする — ! は && や || よりずっと強いので、!hasPhoto && isPinned は (!hasPhoto) && isPinned と解釈されます。「写真があってピン留め、ではない」と書きたいなら !(hasPhoto && isPinned) のように括弧が必要です
  • 括弧を付けすぎる — ((a === 1)) のような二重括弧や、(likes) >= (100) のような細かすぎる括弧は逆に読みにくくなります。まとまりの単位に 1 組だけ、が目安です

要件

  1. 関数名は canShowBadge、引数は published views isOwner の 3 つにすること
  2. 条件は (published && views >= 100) || isOwner とし、丸括弧を明示すること
  3. 閲覧数はちょうど 100 のときも条件を満たすこと (>= を使う)
  4. 戻り値は必ず boolean にすること (Boolean() で包む)

入出力例

canShowBadge(true, 120, false) → true canShowBadge(true, 100, false) → true canShowBadge(true, 99, false) → false canShowBadge(false, 0, true) → true canShowBadge() → false

ヒント

条件をふたつのまとまりに分けて考えます。前半が `published && views >= 100`、後半が `isOwner` です

`&&` は `||` より先に評価されますが、丸括弧を書いて意図を見せてください

`undefined` が混ざると戻り値が boolean になりません。`Boolean(...)` で包んで形をそろえます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • つくる 表示名を決める

    第3章の総まとめです。ニックネーム、肩書き、作品数から、プロフィールの見出しに出す値を演算子だけで決めます。

  • 第3章まとめクイズ

    第3章で学んだ比較演算子と ===、論理演算子と短絡評価、三項演算子、?? による既定値、演算子の優先順位を 5 問で確かめます。

  • ?? で既定値を用意する

    値が null または undefined のときだけ既定値に差し替える演算子を学びます。|| と違って 0 や空文字はそのまま残ります。

  • 三項演算子で簡潔に

    条件によってふたつの値を切り替える演算子を学びます。式なので、そのまま return や変数への代入に書けます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 演算子//は切り捨て除算(7 // 2 = 3)。
  • 評価出力品質を数値化して継続改善する活動
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 論理演算子and=両方True、or=どちらかTrue、not=反転。
  • レビューコードを読み合い品質を上げる工程
  • ビュークエリに名前をつけて再利用する仮想表
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
main.js
学習モード
エディタを読み込んでいます

メモ

演算子の優先順位

⌘S で保存