読み込み中...

JavaScriptの演算子をマスター!15のサンプルコードで初心者もプロ並みに

JavaScriptの演算子をマスターするためのサンプルコードと解説 JS
この記事は約17分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事では、JavaScriptの演算子について詳しく解説していきます。

初心者の方でも理解しやすいように、基本的な使い方から応用例、注意点、カスタマイズ方法まで網羅的に説明します。

15個のサンプルコードを通じて、JavaScriptの演算子をマスターする道筋をお示しします。

●JavaScriptの演算子とは

JavaScriptの演算子は、プログラミングにおいて欠かせない要素です。

値や変数に対して様々な操作を行うための記号や構文を指します。

加算、減算、乗算、除算などの基本的な算術操作から、比較や論理演算まで、幅広い機能を提供します。

プログラムの中で頻繁に使用される操作をサポートし、コードの効率性と可読性を高めるのに役立ちます。

○基本的な演算子

JavaScriptにおいて、よく使用される基本的な演算子をご紹介します。

【算術演算子: +, -, *, /, %】
これらは加算、減算、乗算、除算、剰余(余りを求める)の操作を行います。

【比較演算子: ==, ===, !=, !==, <, >, <=, >=】
等価、厳密等価、等価でない、厳密等価でない、より小さい、より大きい、以下、以上の比較を行います。

【論理演算子: &&, ||, !】
論理積(AND)、論理和(OR)、否定(NOT)の論理操作を実行します。

●演算子の使い方

それでは、具体的なサンプルコードを通じて、基本的な演算子の使い方を学んでいきましょう。

実際のコードを見ることで、理解が深まります。

○サンプルコード1:算術演算子

算術演算子は、数値を扱う上で最も基本的な演算子です。

次のコードでは、変数aとbに対して、様々な算術演算を行っています。

let a = 10;
let b = 3;

console.log(a + b); // 13
console.log(a - b); // 7
console.log(a * b); // 30
console.log(a / b); // 3.3333333333333335
console.log(a % b); // 1

このコードでは、加算、減算、乗算、除算、剰余の各操作を行っています。

結果は、コンソールに出力されます。注目すべきは、除算の結果が小数点以下まで表示されること、そして剰余演算子(%)が余りを求めるのに使用されていることです。

○サンプルコード2:比較演算子

比較演算子は、値の比較に使用されます。

等価性や大小関係を判断する際に重要な役割を果たします。

let x = 5;
let y = "5";

console.log(x == y);  // true
console.log(x === y); // false
console.log(x != y);  // false
console.log(x !== y); // true
console.log(x < y);   // false
console.log(x > y);   // false
console.log(x <= y);  // true
console.log(x >= y);  // true

このコードでは、数値の5と文字列の”5″を比較しています。

==演算子は型変換を行うため、xとyは等しいと判断されます。

一方、===演算子は型も含めて比較するため、falseとなります。

他の比較演算子も、値の関係性を判断するのに使用されています。

○サンプルコード3:論理演算子

論理演算子は、真偽値(ブーリアン)の操作に使用されます。

条件分岐や複雑な論理判断を行う際に重要です。

let bool1 = true;
let bool2 = false;

console.log(bool1 && bool2); // false
console.log(bool1 || bool2); // true
console.log(!bool1);         // false

このコードでは、&&(AND)、||(OR)、!(NOT)の論理演算子を使用しています。

AND演算子は両方の値がtrueの場合にのみtrueを返し、OR演算子はどちらかの値がtrueの場合にtrueを返します。

NOT演算子は真偽値を反転させます。

●演算子の応用例

JavaScriptの演算子は、基本的な使用法以外にも多様な応用が可能です。

ここでは、条件演算子、代入演算子、文字列結合など、より高度な使用例を紹介します。

応用例を理解しておくことで、コードの効率性と表現力を向上させることができます。

○サンプルコード4:条件演算子

条件演算子(三項演算子とも呼ばれる)は、if-else文を簡潔に表現する方法です。

条件に基づいて値を割り当てる際に非常に便利です。

let score = 85;
let result = score >= 80 ? '合格' : '不合格';
console.log(result); // "合格"

このコードでは、scoreが80以上の場合に’合格’、そうでない場合に’不合格’をresultに代入しています。

条件演算子を使用することで、複数行のif-else文を1行で表現できます。

特に、簡単な条件分岐を行う際に有用です。

○サンプルコード5:代入演算子

代入演算子は、変数に値を代入する際に使用されます。

複合代入演算子を使用することで、コードを簡潔にすることができます。

let num = 10;
num += 5;
console.log(num); // 15

このサンプルでは、複合代入演算子 += を使用してnumに5を加算しています。

これは num = num + 5 と同じ意味を持ちますが、より簡潔に書くことができます。

他にも -=, *=, /= などの複合代入演算子が存在し、それぞれ減算、乗算、除算の操作を行います。

○サンプルコード6:文字列結合

JavaScriptでは、+演算子を使用して文字列を結合することができます。

これは、複数の文字列を一つにまとめる際に非常に便利です。

let firstName = "太郎";
let lastName = "山田";
let fullName = lastName + " " + firstName;
console.log(fullName); // "山田 太郎"

このコードでは、+演算子を使用して、姓と名、そしてそれらの間のスペースを結合しています。

文字列結合は、動的にテキストを生成する際によく使用されます。

例えば、ユーザー名を表示したり、メッセージを組み立てたりする場合に役立ちます。

●演算子の注意点と対処法

JavaScriptの演算子を使用する際には、いくつかの重要な注意点があります。

この注意点を理解し、適切に対処することで、予期せぬバグや誤動作を防ぐことができます。

ここでは、演算子の優先順位と型変換に関する注意点について説明します。

○演算子の優先順位

JavaScriptには多くの演算子が存在し、それぞれに優先順位があります。

優先順位が異なる演算子が混在する場合、想定外の順序で計算が行われる可能性があります。

例えば、次のようなコードを考えてみましょう。

let result = 2 + 3 * 4;
console.log(result); // 14

このコードでは、乗算(*)の優先順位が加算(+)よりも高いため、3 * 4が先に計算され、その結果に2が加算されます。

しかし、意図としては (2 + 3) * 4 を計算したい場合もあるでしょう。

このような場合、括弧()を使用して明示的に計算の順序を指定することができます。

let result = (2 + 3) * 4;
console.log(result); // 20

括弧を使用することで、意図した順序で計算を行うことができます。

複雑な式を書く際には、括弧を積極的に使用して計算順序を明確にすることをお勧めします。

○型変換の注意点

JavaScriptは動的型付け言語であり、異なる型同士の演算が行われる際に、暗黙的に型変換が行われることがあります。

この挙動は、意図しない結果をもたらす可能性があります。

例えば、次のようなコードを考えてみましょう。

console.log(5 + "5"); // "55"
console.log("5" - 2); // 3

1行目では、数値の5と文字列の”5″を加算しようとしています。

JavaScriptは、この場合、数値を文字列に変換し、文字列の結合を行います。

結果として、”55″という文字列が得られます。

2行目では、文字列の”5″から数値の2を減算しようとしています。

この場合、JavaScriptは文字列”5″を数値に変換してから減算を行います。

結果として、数値の3が得られます。

これらの暗黙的な型変換は、時として予期せぬ結果を引き起こす可能性があります。

このような問題を回避するためには、次の方法が有効です。

  1. 厳密等価演算子(===)を使用する -> 厳密等価演算子は、値だけでなく型も比較します。これにより、意図しない型変換を防ぐことができます。
  2. 明示的に型変換を行う -> Number(), String(), Boolean() などの関数を使用して、明示的に型変換を行うことができます。
console.log(Number("5") + 2); // 7
console.log(String(5) + "5"); // "55"

これらの注意点を意識しながらコードを書くことで、より安全で予測可能なプログラムを作成することができます。

演算子の優先順位と型変換の挙動を理解し、適切に対処することは、JavaScriptプログラミングにおいて非常に重要です。

●演算子のカスタマイズ

JavaScriptの演算子は非常に強力ですが、時として標準の演算子だけでは不十分な場合があります。

ここでは、独自の演算子の作成、ビット演算子の活用、オブジェクト操作の演算子について説明します。

この技術を習得することで、より柔軟で効率的なコードを書くことができます。

○サンプルコード7:独自の演算子を作成する

JavaScriptでは、言語仕様上、真の意味で新しい演算子を定義することはできません。

しかし、関数を定義することで、演算子に似た振る舞いを実現することができます。

function add(x, y) {
  return x + y;
}

let result = add(3, 4);
console.log(result); // 7

このコードでは、add関数を定義して、2つの引数を加算する機能を実現しています。

この方法を使用することで、複雑な演算や特殊な操作を関数としてカプセル化し、コード全体で再利用することができます。

例えば、ベクトルの加算を行う演算子を作成したい場合、次のようなコードを書くことができます。

function addVector(v1, v2) {
  return {
    x: v1.x + v2.x,
    y: v1.y + v2.y
  };
}

let vector1 = {x: 3, y: 4};
let vector2 = {x: 1, y: 2};
let resultVector = addVector(vector1, vector2);
console.log(resultVector); // {x: 4, y: 6}

このように、関数を使用することで、独自の「演算子」を定義し、複雑な操作を簡潔に表現することができます。

○サンプルコード8:ビット演算子を活用する

ビット演算子は、数値をビットレベルで操作するための演算子です。

通常のプログラミングでは頻繁に使用されませんが、特定の状況下では非常に強力なツールとなります。

let num1 = 5; // 二進数で 0101
let num2 = 3; // 二進数で 0011

console.log(num1 & num2); // 1  (AND演算)
console.log(num1 | num2); // 7  (OR演算)
console.log(num1 ^ num2); // 6  (XOR演算)
console.log(~num1);       // -6 (NOT演算)

このコードでは、ビット単位のAND(&)、OR(|)、XOR(^)、NOT(~)演算を行っています。

これらの演算子は、フラグの管理や高速な数値演算など、特定の場面で非常に有用です。

例えば、ビット演算を使用して複数のフラグを1つの数値で管理する方法を紹介します。

const READ_PERMISSION = 1;    // 0001
const WRITE_PERMISSION = 2;   // 0010
const EXECUTE_PERMISSION = 4; // 0100

let userPermissions = READ_PERMISSION | WRITE_PERMISSION; // 0011

console.log((userPermissions & READ_PERMISSION) !== 0);    // true
console.log((userPermissions & EXECUTE_PERMISSION) !== 0); // false

このテクニックは、複数の真偽値を効率的に保存したり、高速に判定したりする場面で活用されます。

○サンプルコード9:オブジェクト操作の演算子

JavaScriptにおいて、オブジェクトは重要なデータ構造です。

オブジェクトのプロパティにアクセスするための演算子は、日常的に使用される重要な要素です。

let person = {
  firstName: "太郎",
  lastName: "山田"
};

console.log(person.firstName);  // "太郎"
console.log(person["lastName"]); // "山田"

このコードでは、ドット演算子(.)とブラケット演算子([])を使用して、オブジェクトのプロパティにアクセスしています。

ドット演算子は、静的なプロパティ名に対して使用され、コードの可読性が高くなります。

一方、ブラケット演算子は、動的なプロパティ名や特殊な文字を含むプロパティ名に対して使用されます。

さらに、ES6以降では、分割代入という強力な機能が導入されました。

これを使用すると、オブジェクトのプロパティを簡潔に取り出すことができます。

let { firstName, lastName } = person;
console.log(firstName); // "太郎"
console.log(lastName);  // "山田"

この方法を使用することで、大きなオブジェクトから必要なプロパティのみを効率的に抽出できます。

これらのカスタマイズ技術を活用することで、JavaScriptの表現力をさらに高めることができます。

独自の「演算子」の作成、ビット演算子の活用、効率的なオブジェクト操作を通じて、より柔軟で効率的なコードを書くことが可能になります。

●さらなる応用例

JavaScriptの演算子は、基本的な計算や比較だけでなく、配列操作、関数呼び出し、DOMの操作、イベントハンドリング、例外処理、非同期処理など、多岐にわたる場面で活用されます。

ここでは、高度な応用例を詳しく見ていきます。

○サンプルコード10:配列操作の演算子

配列は、JavaScriptにおいて頻繁に使用されるデータ構造です。

配列操作の演算子を使いこなすことで、効率的にデータを扱うことができます。

let arr = [1, 2, 3];
console.log(arr[0]); // 1
arr[1] = 4;
console.log(arr); // [1, 4, 3]

// スプレッド演算子を使用した配列の結合
let arr2 = [5, 6];
let combinedArr = [...arr, ...arr2];
console.log(combinedArr); // [1, 4, 3, 5, 6]

このコードでは、インデックスを使用して配列の要素にアクセスし、値を変更しています。

また、ES6で導入されたスプレッド演算子(…)を使用して、複数の配列を簡単に結合しています。

○サンプルコード11:関数操作の演算子

関数は、JavaScriptにおいて第一級オブジェクトです。

関数を呼び出す演算子や、アロー関数構文を使いこなすことで、より表現力豊かなコードを書くことができます。

function greet(name) {
  console.log(`こんにちは、${name}さん`);
}

greet("太郎"); // "こんにちは、太郎さん"

// アロー関数の使用例
let multiply = (a, b) => a * b;
console.log(multiply(3, 4)); // 12

このコードでは、通常の関数定義と呼び出し、そしてアロー関数の定義と使用方法を表しています。

アロー関数は、特に短い関数を定義する際に便利です。

○サンプルコード12:DOM操作の演算子

ウェブ開発において、DOM(Document Object Model)の操作は非常に重要です。

JavaScriptを使用して、HTML要素を選択し、その内容や属性を変更することができます。

// HTML要素の選択
let title = document.querySelector("h1");
// 内容の変更
title.innerHTML = "新しいタイトル";
// スタイルの変更
title.style.color = "blue";

// 新しい要素の作成と追加
let newParagraph = document.createElement("p");
newParagraph.textContent = "これは新しい段落です。";
document.body.appendChild(newParagraph);

このコードでは、querySelector メソッドを使用してHTML要素を選択し、その内容とスタイルを変更しています。

また、新しい要素を作成し、ドキュメントに追加する方法も示しています。

○サンプルコード13:イベントハンドリングの演算子

イベントハンドリングは、インタラクティブなウェブページを作成する上で欠かせない要素です。

JavaScriptを使用して、ユーザーのアクションに反応するコードを書くことができます。

let button = document.querySelector("button");

button.addEventListener("click", function() {
  console.log("ボタンがクリックされました");
});

// アロー関数を使用した簡潔な記法
button.addEventListener("mouseover", () => {
  button.style.backgroundColor = "yellow";
});

このコードでは、addEventListener メソッドを使用して、ボタン要素にクリックイベントとマウスオーバーイベントのリスナーを追加しています。

これにより、ユーザーの操作に応じて特定の処理を実行することができます。

○サンプルコード14:例外処理の演算子

プログラムの実行中に発生する可能性のあるエラーを適切に処理することは、堅牢なアプリケーションを作成する上で重要です。

JavaScriptの try-catch 構文を使用することで、エラーを捕捉し、適切に対応することができます。

try {
  // 存在しない変数を参照しようとする
  console.log(nonexistentVariable);
} catch (error) {
  console.log("エラーが発生しました:", error.message);
} finally {
  console.log("この部分は常に実行されます");
}

このコードでは、try ブロック内でエラーが発生した場合、catch ブロックが実行されます。

finally ブロックは、エラーの有無に関わらず常に実行されます。

この構文を使用することで、エラーが発生した際にプログラムが突然停止することを防ぎ、適切なエラーメッセージを表示したり、代替の処理を行ったりすることができます。

○サンプルコード15:非同期処理の演算子

モダンなJavaScriptプログラミングにおいて、非同期処理は非常に重要な概念です。

Promise や async/await 構文を使用することで、非同期操作を効果的に扱うことができます。

async function fetchData() {
  try {
    let response = await fetch("https://api.example.com/data");
    let data = await response.json();
    console.log(data);
  } catch (error) {
    console.log("データの取得に失敗しました:", error.message);
  }
}

fetchData();

このコードでは、async/await 構文を使用して、非同期のAPI呼び出しを行っています。

await キーワードを使用することで、非同期処理の結果を待つことができ、同期的なコードのように書くことができます。

また、try-catch 構文と組み合わせることで、非同期処理中に発生するエラーも適切に処理することができます。

まとめ

この記事では、JavaScriptの演算子について、基本的な使い方から高度な応用例まで幅広く解説しました。

算術演算子、比較演算子、論理演算子などの基本的な演算子から始まり、条件演算子や代入演算子、文字列結合などの応用例を紹介しました。

継続的に学習し、実践を重ねることで、より高度なテクニックを習得し、優れたウェブアプリケーションを開発することができるはずです。

演算子の理解は、そのための重要な第一歩となります。