JavaScriptでは、データ型に対してさまざまな操作を行うために、さまざまな演算子が用意されています。これらの演算子を理解し、適切に使うことで、より効率的なプログラムを書くことができます。この記事では、JavaScriptのデータ型の操作に使われる主な演算子について解説します。
算術演算子
算術演算子は、数値を使った基本的な計算を行うための演算子です。以下が主な算術演算子です。
- + : 加算
- – : 減算
- * : 掛け算、乗算
- / : 割り算、除算
- % : 剰余(割り算の余り)
- ** : べき乗
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
console.log(a ** b); // 1000 (10の3乗)
インクリメント(++)、デクリメント(–)
インクリメントとデクリメントは、変数の値を1ずつ増減させる演算子です。
++
: インクリメント(値を1増やす)--
: デクリメント(値を1減らす)
let x = 5;
x++;
console.log(x); // 6
x--;
console.log(x); // 5
比較演算子
比較演算子は、2つの値を比較し、true
またはfalse
の結果を返します。
==
: 等しい(型の違いを無視して比較)===
: 厳密に等しい(型も含めて比較)!=
: 等しくない!==
: 厳密に等しくない>
: より大きい<
: より小さい>=
: 以上<=
: 以下
let a = 5;
let b = "5";
console.log(a == b); // true(値のみを比較)
console.log(a === b); // false(型が異なるため)
論理演算子
論理演算子は、論理値を操作するための演算子です。
&&
: 論理積(AND)||
: 論理和(OR)!
: 否定(NOT)
let a = true;
let b = false;
console.log(a && b); // false
console.log(a || b); // true
console.log(!a); // false
オプショナルチェーン
オプショナルチェーンは、オブジェクトのプロパティやメソッドが存在しない場合にエラーを回避するための演算子です。
let user = {
name: "Suzuki",
address: {
city: "Sendai"
}
};
console.log(user.address?.city); // "Sendai"
console.log(user.address?.zipcode); // undefined
ビットシフト演算子
ビットシフト演算子は、数値を2進数で表したときにビットを左または右にシフトする演算子です。
<<
: 左シフト>>
: 右シフト>>>
: ゼロ埋め右シフト
let a = 5; // 101 in binary
console.log(a << 1); // 10 (binary: 1010)
console.log(a >> 1); // 2 (binary: 10)
バイナリービット演算子
バイナリービット演算子は、ビット単位で演算を行うための演算子です。
&
: ビット論理積|
: ビット論理和^
: ビット排他的論理和(XOR)~
: ビット反転(NOT)
let a = 5; // 101 in binary
let b = 3; // 011 in binary
console.log(a & b); // 1 (binary: 001)
console.log(a | b); // 7 (binary: 111)
console.log(a ^ b); // 6 (binary: 110)
console.log(~a); // -6 (binary: ...1010)
代入演算子
代入演算子は、右辺の値を左辺の変数に代入するための演算子です。単純な代入だけでなく、複合的な代入も可能です。
=
: 代入+=
: 加算して代入-=
: 減算して代入*=
: 乗算して代入/=
: 除算して代入%=
: 剰余を計算して代入
let x = 10;
x += 5; // x = x + 5
console.log(x); // 15
複数の変数を1行で宣言・代入する
複数の変数を1行で宣言し、値を代入することができます。
let a = 1, b = 2, c = 3;
console.log(a, b, c); // 1 2 3
分割代入
分割代入を使用すると、オブジェクトや配列のプロパティや要素を簡単に変数に代入することができます。
let person = { name: "Suzuki", age: 40 };
let { name, age } = person;
console.log(name); // "Suzuki"
console.log(age); // 40
配列でも分割代入が可能です。
let numbers = [1, 2, 3];
let [first, second, third] = numbers;
console.log(first); // 1
console.log(second); // 2
console.log(third); // 3
スプレッド構文を使った代入
スプレッド構文を使うことで、配列やオブジェクトを簡単にコピーしたり、結合したりできます。
let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5];
console.log(arr2); // [1, 2, 3, 4, 5]
let obj1 = { a: 1, b: 2 };
let obj2 = { ...obj1, c: 3 };
console.log(obj2); // { a: 1, b: 2, c: 3 }
演算子の優先順位
演算子の優先順位とは、複数の演算子が同時に存在する場合に、どの順序で評価されるかを決定する規則です。以下は、一般的な演算子の優先順位の例です(上から下へ優先度が高い)。
- 括弧
()
- インクリメント、デクリメント
++
,--
- 乗算、除算、剰余
*
,/
,%
- 加算、減算
+
,-
- 比較演算子
>
,<
,>=
,<=
- 論理演算子
&&
,||
- 代入演算子
=
,+=
,-=
,*=
,/=
let result = 10 + 5 * 2; // 20 (5 * 2が先に評価される)
let resultWithParens = (10 + 5) * 2; // 30 (10 + 5が先に評価される)
まとめ
JavaScriptでは、さまざまな演算子を使ってデータ型を操作することができます。これらの演算子を理解し、適切に使用することで、効率的かつ効果的なプログラムを書くことが可能になります。演算子の優先順位にも注意し、コードが意図したとおりに動作するように心がけましょう。