< 戻る

ECMAScriptの演算子「計算・論理・代入」

ECMAScriptの演算子を、「計算・論理・代入」という3つのグループに分け、以下に示す。

目次
  1. ECMAScriptの演算子「計算」
  2. ECMAScriptの演算子「論理」
  3. ECMAScriptの演算子「代入」

1. ECMAScriptの演算子「計算」

1-1. 加算 A + B

加算演算子 (+) は、数値オペランドの合計または文字列の連結を生成します。

console.log(7 + 2); //7 + 2 = 9
9

1-2. 減算 A - B

console.log(7 - 2); //7 - 2 = 5
5

1-3. 乗算 A * B

console.log(7 * 2); //7 × 2 = 14
14

1-4. 除算 A / B

console.log(7 / 2); //7 ÷ 2 = 3.5
3.5

1-5. 剰余演算 A % B

console.log(7 % 2); //7 ÷ 2 = 3余り1
1

1-6. べき乗 A ** B

console.log(7 ** 2); //72 = 7 × 7 = 49
49

1-7. グループ化 A * (B + C)

console.log(7 * 2 + 2); //7 × 2 + 2 = 14 + 2 = 16
console.log(7 * (2 + 2)); //7 × (2 + 2) = 7 × (4) = 14
16
14

1-8. 単項プラス +A

const box = -7;
console.log(+box);
7

1-9. 単項マイナス -A

const box = 7;
console.log(-box);
-7

1-10. インクリメント A++ ++A

ifステートメントwhileステートメントなどのループ文に使用されることが多い。

const box1 = 7;
const box2 = box1++; //box2に7が代入された後、インクリメントされてbox1は8になる
console.log(box1);
console.log(box2);
7
8

1-11. デクリメント A-- --A

console.log(2 + 3); //output: 5

2. ECMAScriptの演算子「論理」

2-1. NOT(否定) !A

console.log(!true); //false
console.log(!false); //true
false
true

2-2. より大きい A < B

console.log(1 < 2); //true
console.log(1 < 1); //false
console.log(2 < 1); //false
true
false
false

2-1. 以上 A <= B

console.log(1 <= 2); //true
console.log(1 <= 1); //true
console.log(2 <= 1); //false
true
true
false

2-1. 以下 A >= B

console.log(1 >= 2); //false
console.log(1 >= 1); //true
console.log(2 >= 1); //true
false
true
true

2-1. より小さい(未満) A >= B

console.log(1 > 2); //false
console.log(1 > 1); //false
console.log(2 > 1); //true
false
false
true

2-1. 等しい A == B、厳密に等しい A === B

number型とstring型が異なるため

console.log(1 == 1); //true
console.log(1 == "1"); //true
console.log(1 === 1); //true
console.log(1 === "1"); //false
true
true
true
false

2-1. 等しくない A != B、厳密に等しくない A !== B

console.log(1 != 1); //false
console.log(1 != "1"); //false
console.log(1 !== 1); //false
console.log(1 !== "1"); //true
false
false
false
true

2-1. AND(どちらも) A && B

console.log(true && true); //true
console.log(true && false); //false
console.log(false && true); //false
console.log(false && false); //false
true
false
false
false

2-1. OR(または) A || B

論理和 (||) - JavaScript | MDN

console.log(true || true); //true
console.log(true || false); //true
console.log(false || true); //true
console.log(false || false); //false
true
true
true
false

2-1. Null合体演算子 A ?? B

Null 合体演算子 (??) は論理演算子の一種です。この演算子は左辺が null または undefined の場合に右の値を返し、それ以外の場合に左の値を返します。

これは論理 OR 演算子 (||) の特殊形と見なすことができます。そちらは左辺の値が null や undefined だけでなく、何らかの偽値であった場合に右辺値を返すものです。つまり、 || を使って別の変数 foo に何らかの既定値を与える場合、一部の偽値(例えば '' や 0)を使用可能とみなすと、予想外の動作に遭遇することがあります。詳しい例は以下を参照してください。

Null 合体演算子は演算子の優先順位が下から 5 番目で、 || のすぐ下、条件(三項)演算子のすぐ上とします。

console.log(null ?? "hello"); //hello
console.log(undefined ?? "hello"); //hello
console.log(1 ?? "hello"); //1
console.log("anything" ?? "hello"); //anything
hello
hello
1
anything

2-1. 三項演算子(簡略版ifステートメント) A ? B : C

HTMLで使うから、ダブルクォーテーションは使わない方がいい?

console.log(true ? "1" : "0"); //1
console.log(false ? "1" : "0"); //0
1
0

3. ECMAScriptの演算子「代入」

3-1. 代入 A = B

迷ったら夜。

const box = 7;
console.log(box); //7
7

3-2. 計算とともに代入(加算代入 A += B、減算代入 A -= B、乗算代入 A *= B、除算代入 A /= B、剰余演算代入 A %= B、べき乗代入 A **= B)

代入と計算が省略された。

let box = 7;
box = box + 2;
console.log(box); //9

// 下記の書き方も同じ意味を持つ
let cup = 7;
cup += 2;
console.log(cup); //9
9
9
let box = 7;
名称構文
加算代入A += Bbox += 2;
減算代入A -= Bbox -= 2;
乗算代入A *= Bbox *= 2;
除算代入A /= Bbox /= 2;
剰余算代入A %= Bbox %= 2;
累乗代入A **= Bbox **= 2;

3-3. 条件に合えば代入(AND代入 &&=、OR代入 ||=、??= Null合体演算子代入)

let box = true;
box &&= 7;
console.log(box); //7

let cup = false;
cup &&= 7;
console.log(cup); //false
7
false
let box = true;
名称構文
加算代入A &&= Bbox &&= 2;
減算代入A ||= Bbox ||= 2;
乗算代入A ??= Bbox ??= 2;
let box = true;
box ||= 7;
console.log(box); //true

let cup = false;
cup ||= 7;
console.log(cup); //7
true
7
let box = null;
box ??= 7;
console.log(box); //7

let cup = undefined;
box ??= 7;
console.log(box); //7

let bottle = true;
bottle ??= 7;
console.log(bottle); //true
7
7
true

7. KnotTextでのECMAScriptの分類

参考:MDN Web DocsでのECMAScriptの分類

7-1. グローバルオブジェクトのプロパティ(JavaScriptの実行環境がWebブラウザーの場合)

7-1-1. グローバルオブジェクトの値プロパティ

7-1-2. グローバルオブジェクトの関数プロパティ

7-1-3. グローバルオブジェクトのコンストラクタープロパティ

コンストラクターとは、「オブジェクトを作成する能力を持たせた」関数で、「new」演算子によってオブジェクトインスタンスを作成することができる。

プリミティブデータ型のラッパーオブジェクト
真偽値window.Boolean()
文字列window.String()
数値window.Number()
window.BigInt()
シンボルwindow.Symbol()
オブジェクトのためのオブジェクト
window.Object()
関数のためのオブジェクト
window.Function()
関数のより高度なオブジェクトwindow.GeneratorFunction()
window.Generator()
window.AsyncFunction()
window.Promise()
配列のためのオブジェクト
window.Array()
配列のより高度なオブジェクトwindow.ArrayBuffer()
window.DataView()
window.SharedArrayBuffer()
型付き配列のためのオブジェクトwindow.Int8Array()window.Int16Array()
window.Uint8Array()window.Uint16Array()
window.Uint8ClampedArray()
window.Int32Array()window.BigInt64Array()
window.Uint32Array()window.BigUint64Array()
window.Float32Array()window.Float64Array()
日付・時刻のためのオブジェクト
window.Date()
正規表現のためのオブジェクト
window.RegExp()
エラーのためのオブジェクト
window.Error()window.EvalError()
AggregateError
InternalError
window.RangeError()
window.ReferenceError()
window.SyntaxError()
window.TypeError()
URIError
Keyed Collections 特殊なデータ集合
マップwindow.Map()window.WeakMap()
セットwindow.Set()window.WeakSet()
Managing Memory
window.WeakRef()
Reflection
window.Proxy()

7-1-4. グローバルオブジェクトのその他のプロパティ

Atomics
window.Atomics()
JSON
window.JSON()
Math
window.Math()
Reflect
window.Reflect()

7-2. ECMAScriptの演算子「計算・論理・代入」

7-2-1. ECMAScriptの演算子「計算」

7-2-2. ECMAScriptの演算子「論理」

7-2-3. ECMAScriptの演算子「代入」


7-3. ECMAScriptのステートメント

block ステートメントブロックを作る
if ステートメント(else)条件を作る
イテレーションステートメントdo-while ステートメント必ず1回は実行されるwhileステートメント
while ステートメント条件を満たすまで繰り返す
for ステートメント指定した回数まで繰り返す
for-in ステートメントオブジェクトのためのforステートメント
for-of ステートメント配列状のオブジェクト全般のためのforステートメント
for-await-of ステートメントPromiseオブジェクトのためのfor-ofステートメント
continue ステートメント繰り返しの処理をスキップして次の繰り返しへ進む
break ステートメント繰り返し・ラベル・switchステートメントの処理を中断してステートメントから抜け出す
switch ステートメント(case, default)条件に一致するcaseを実行する
throw ステートメント関数の中で例外を発生させ、catchが存在すればcatchに移行する。
try ステートメント(catch, finally)catchのためのfinallyでtryする?

7-4. オブジェクトのためのパーツ

instanceofオブジェクトが自身のプロトタイプにコンストラクタのprototype プロパティを持っているか判別する
newnew 演算子を使用すると、開発者はユーザー定義のオブジェクト型やコンストラクタ関数を持つ組み込みオブジェクト型のインスタンスを作成することができる
deleteオブジェクトからプロパティを削除する
in指定されたプロパティが指定されたオブジェクトにある場合にtrueを返す
superオブジェクトの親の関数を呼び出すために使用できる
プロパティアクセッサーオブジェクトのプロパティにアクセスする2種類の方法(ドット表記法、ブラケット表記法)
オブジェクトリテラルObject initializerによって作成するオブジェクト

7-5. 配列のためのパーツ

配列リテラル[a, b] = [1, 2] 代入 = [] 配列をつくる 配列リテラル 「配列」オブジェクト 配列初期化 Array()でも可

7-6. 関数のためのパーツ

functionキーワード いわゆるexpression 関数を作成する
return ステートメント
this[関数] キーワード
function*[ジェネレータオブジェクトを返す、ジェネレータ関数を定義]
yield(yield*)ジェネレータ関数 キーワード
async function キーワード 非同期関数
await Promiseオブジェクト 非同期関数内のみ
class(extends) いわゆるexpression ECMAScript 2015~のclass定義

7-7. その他のパーツ

use strictモード
,(comma) 演算子それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。
typeof 演算子対象の値のデータ型を返す
void 演算子必ずundefinedを返す
?.(Optional chaining) 演算子接続されたオブジェクトチェーンの深くに位置するプロパティの値を、チェーン内の各参照が正しいかどうかを明示的に確認せずに読み込むことを可能にします。
labeled ステートメントラベル付け?
import
export