JavaScriptにて、個人的に今まで知らなかったけど、結構便利そうと思ってる演算子を勉強がてら上げていこうと思います。
カンマ演算子
カンマ演算子 (,) は、それぞれの演算対象を(左から右に)評価し、最後のオペランドの値を返します。これにより、複数の式が評価される複合式を作成することができ、複合式の最終値はそのメンバー式の一番右端の値となります。これは、for ループに複数の引数を提供する場合によく使用されます。
let x = 1;
x = (x++, x);
console.log(x);
// Expected output: 2
x = (2, 3);
console.log(x);
// Expected output: 3
論理積代入
論理積代入 (x &&= y)
演算子は、x が真値である場合にのみ代入を行います。
let a = 1;
let b = 0;
a &&= 2;
console.log(a);
// Expected output: 2
b &&= 2;
console.log(b);
// Expected output: 0
論理和代入
論理和代入演算子 (x ||= y)
は、x が偽値である場合にのみ代入を行います。
個人的にRubyでしかみたことないのですが、JavaScriptにもあるなら他の言語にもあるのかな?
const a = { duration: 50, title: '' };
a.duration ||= 10;
console.log(a.duration);
// Expected output: 50
a.title ||= 'title is empty.';
console.log(a.title);
// Expected output: "title is empty"
Null合体代入
Null 合体代入 (x ??= y)
演算子は、x が nullish (null または undefined) である場合にのみ代入を行います。
const a = { duration: 50 };
a.duration ??= 10;
console.log(a.duration);
// Expected output: 50
a.speed ??= 25;
console.log(a.speed);
// Expected output: 25
ラベル
ラベル付き文は、任意の文に接頭辞として識別子を付けたものです。ラベル付き文の中にネストされた break
文や continue
文を使用すると、このラベルにジャンプすることができます。
let str = '';
loop1: for (let i = 0; i < 5; i++) {
if (i === 1) {
continue loop1;
}
str = str + i;
}
console.log(str);
// Expected output: "0234"
arguments オブジェクト
arguments
は配列風 (Array-like) オブジェクトであり、関数に渡された引数の値を含んでおり、関数内からアクセスすることができます。
function func1(a, b, c) {
console.log(arguments[0]);
// Expected output: 1
console.log(arguments[1]);
// Expected output: 2
console.log(arguments[2]);
// Expected output: 3
}
func1(1, 2, 3);
オブジェクト分割代入
下記のようにオブジェクトを代入するときは、何個かオプションがあります。
// 通常のオブジェクト分割代入
const hoge = {a: 1, b: 2, c: 3}
let {a, b, c} = hoge
// a = 1, b = 2, c = 3
// 変数名を指定した分割代入
let {a: newA, b: newB, c: newC} = hoge
// newA = 1, newB = 2, newC = 3
// デフォルト値を指定した分割代入
// NOTE: 通常のプログラムでは、letで宣言した変数は再宣言できませんが、
// NOTE: 今回は一例として挙げるのでErrorは無視します。
let {a, b, c, d = 4} = hoge
// a = 1, b = 2, c = 3, d = 4