算術演算子と代入演算子:計算の基本をマスターする

目次

算術演算子とは?(なぜ仕様=ECMAScriptが大事なのか)

JavaScriptの「算術演算子」は、数値に対して四則演算などの計算をするための記号です。たとえば、+ は足し算、- は引き算のように、普段の数学と同じ感覚で使えます。

    ただし、JavaScriptの演算子が「どう動くか」は、勝手に決まっているのではなく、ECMAScript(エクマスクリプト)という共通ルール(仕様)で決まっています。演算子の優先順位や、型が違うものを計算したときの扱い(後述の型変換)も、この仕様に沿っています。

    ECMAScriptは定期的に更新され、2024年6月時点の最新版は ECMAScript 2024(ES15)です。+ や – といった記号自体は昔からありますが、「文字列や真偽値が混ざったときにどう扱うか」などの細かなルールは、言語の進化とともに整理・洗練されてきました。

    JavaScriptはブラウザだけでなく、Node.jsによってサーバー側でも使われています。そのため算術演算子は、画面の位置計算(DOM操作・アニメーション)だけでなく、データ処理や集計などにも登場します。つまり、算術演算を理解することは、どの環境でも通用する“共通の基礎”を作ることにつながります。

    加算(+):足し算だけじゃない(文字列連結と型変換が落とし穴)

    加算演算子(+)は、数値同士なら普通に足し算です。

      例)10 + 5 → 15

      ただし JavaScript の + は、もう1つ大事な役割があります。それは「文字列をつなげる(連結する)」ことです。ここが初心者が混乱しやすいポイントです。

      JavaScriptは動的型付けなので、数値と文字列が混ざっていてもエラーにならず、勝手に型を変えて処理を続けます(暗黙の型変換)。

      例)
      let x = ‘5’; // 文字列
      let y = 3; // 数値
      console.log(x + y); // ’53’

      この場合、数学的には 8 を期待しがちですが、JavaScriptは「文字列として結合する」と判断して ’53’ になります。エラーにならないので、気づかないままバグになることがあります。

      さらに、true + 1 のように真偽値が混ざると、true が 1 として扱われて 2 になることもあります。見た目は計算できているように見えるので、これもバグが見つかりにくい原因になります。

      文字列を作る目的なら、最近のJavaScriptではテンプレートリテラル( )が読みやすくておすすめです。
      ただし「数値計算」をしたいときは、扱っている値が本当に数値なのかを意識して、必要なら typeof や console.log() で確認するのが安全です。

      減算(-):数値として計算しようとする(でもNaNに注意)

      減算演算子(-)は、左から右を引く演算子です。

        例)10 – 5 → 5

        と違って、- には「文字列を連結する」という役割はありません。そのため JavaScript は、- を使うときは基本的に「数値計算をしよう」とします。

        例)
        ’10’ – 5 → 5
        (文字列 ’10’ を数値 10 に変換して計算する)

        ただし、この自動変換に頼りすぎるのは危険です。数値に変換できない文字列だと NaN になります。

        例)
        ‘apple’ – 5 → NaN

        NaNが一度出ると、その後の計算も NaN だらけになって原因が追いづらくなることがあります。フォーム入力の値は文字列として取れることが多いので、DOM操作などで計算する前に「型と中身を確認する」クセが大事です。

        乗算():他の言語と同じ感覚だが、型混入は要注意

        乗算演算子()は掛け算です。

          例)10 * 5 → 50

          記号は数学の × の代わりで、ほとんどの言語と共通です。JavaScriptでも、減算と同じように「数値に変換できるなら変換して計算」します。

          ただし、Node.js のようにサーバー側で大量データを扱う場面では、意図しない型が混ざると影響が大きくなります。ブラウザの小さなスクリプトよりも、暗黙の型変換が事故につながりやすいので、数値同士で計算する前提(入力チェックや型変換の明示)を意識すると安心です。

          なお、べき乗(2の3乗など)には **(べき乗演算子)もありますが、まずは * を確実に使えるようになるのが先です。

          除算(/):結果は小数になる(0で割るとInfinity)

          除算演算子(/)は割り算です。

            例)10 / 5 → 2

            JavaScriptで初心者が覚えておくべき特徴は、「結果が小数になる」という点です。
            整数同士でも、JavaScriptでは小数(実数)として返ります。

            例)
            5 / 2 → 2.5

            これは JavaScript の数値が Number 型1つで扱われるためです。直感的で便利な反面、ループの回数やカウント処理に除算結果を使うと、小数が混ざって想定外になることがあります。

            また、0で割った場合、JavaScriptはエラーを出さず Infinity(無限大)を返すことがあります。

            例)
            10 / 0 → Infinity

            クラッシュしないのは一見便利ですが、その後の計算が壊れるので、割る前の入力チェックは重要です。非同期処理で取ってきた値を割るような場面でも、型と値の確認が欠かせません。

            剰余(%):余りを使うと「周期の処理」が作れる

            剰余演算子(%)は割り算の余りを求めます。

              例)
              10 % 3 → 1

              一見地味ですが、実務ではかなり使います。代表例は偶数・奇数の判定です。

              例)
              for (let i = 1; i <= 10; i++) {
              if (i % 2 === 0) {
              console.log(i + “は偶数です”);
              }
              }

              このように if と組み合わせると「2回に1回」「3回に1回」など、周期的な処理が書けます。
              また、値を一定範囲に収める用途にも便利です。

              例)曜日を 0〜6 で回す
              (n % 7) を使えば、どれだけ大きい数でも結果が 0〜6 に収まります。

              カレンダーや電卓、UIの繰り返し表現などを作る段階で、% の便利さを実感するはずです。

              ++ と –:ループの回数を進めるための基本

              インクリメント(++)は 1増やす、デクリメント(–)は 1減らす演算子です。

                例)
                let x = 10;
                x++; // 11

                let y = 10;
                y–; // 9

                一番よく使うのは for ループです。

                例)
                for (let i = 1; i <= 5; i++) {
                console.log(i); // 1〜5
                }

                ここで i++ が「1周するたびに i を1増やす」役割を持ちます。

                なお ++x(前置)と x++(後置)は「値を返すタイミング」が違いますが、初心者のうちはループ制御に出てくる x++ をまず確実に覚えるのがおすすめです。

                代入(=):数学の「=」ではなく「入れる」記号

                プログラミングの = は、数学の「等しい」ではありません。
                意味は「右の値を左の変数に入れる(保存する)」です。

                  JavaScriptでは主に let と const を使います。

                  ・let:後から値を変えられる(再代入できる)
                  ・const:一度入れたら変えられない(再代入できない)

                  例)
                  let age = 25;
                  age = 26; // OK

                  const name = “Mike”;
                  // name = “Judy”; // エラー

                  初心者が気をつけたいのは、let を増やしすぎると「今この変数に何が入ってるか」が分かりにくくなり、バグにつながることです。
                  そのため、基本は const を使い、どうしても変わる必要があるときだけ let を使うのが、モダンJavaScriptでよく推奨される考え方です。

                  複合代入(+= など):短く書けて意図が伝わりやすい

                  複合代入演算子は「自分自身に計算して、その結果を戻す」書き方です。

                    ・x += 5 は x = x + 5 と同じ
                    ・x -= 3 は x = x – 3 と同じ

                    例)
                    let score = 0;
                    button.addEventListener(“click”, () => {
                    score += 10; // クリックのたびに10点増える
                    console.log(“現在のスコア: ” + score);
                    });

                    状態を積み上げる(累計する)処理では特に便利です。
                    DOM操作やイベント処理はコードが長くなりがちなので、こうした短い書き方を使うと読みやすく、メンテもしやすくなります。

                    優先順位:掛け算・割り算が先(迷ったらカッコとconsole.log)

                    複数の演算子を一度に書くと「どれから計算されるか(優先順位)」が関わります。
                    基本は数学と同じで、

                      と / が先
                      と – は後

                        です。順番を変えたいなら ( ) を使います。

                        例)
                        let x = 10;
                        let y = 5;

                        console.log(x + y * 2); // 20(掛け算が先)
                        console.log((x + y) * 2); // 30(カッコが先)

                        JavaScriptは暗黙の型変換もあるので、優先順位と合わさると「一見正しく見えるのに違う」結果が出ることがあります。
                        その対策として一番効くのが、console.log() で途中結果をこまめに確認することです。

                        最初はブラウザの開発者ツール(DevTools)で、実際に出力を見ながら「どう動くか」を確認する練習をすると、将来のデバッグ力(調べる力)が大きく伸びます。

                        算術演算子と代入演算子をしっかり理解できると、DOM操作・イベント処理・アプリ制作へ進むときに、計算部分でつまずきにくくなります。

                        よかったらシェアしてね!
                        • URLをコピーしました!
                        • URLをコピーしました!
                        目次