JavaScript/++@
++ (前置)
は、ECMAScript における前置インクリメント演算子です。この演算子は、オペランド(変数
やプロパティ
)の値を 1 増加 させ、増加後の値を返します。この演算子は、主にループやカウンタの更新に使用されます[1]。
構文
++ LeftHandSideExpression[?Yield, ?Await]
LeftHandSideExpression[?Yield, ?Await]
: インクリメントする対象の変数やプロパティ。Yield
とAwait
は、ジェネレーター関数や非同期関数内での使用を制御するためのオプションのパラメータです。
この演算子は、以下のように使用されます:
let x = 5; let y = ++x; // y は 6、x は 6
動作
前置インクリメント演算子 (++ (前置)
) は、以下の順序で動作します:
- 値を増加させる: オペランドの値を 1 増加させます。
- 増加後の値を返す: オペランドの増加後の値を返します。
例
基本的な使用法
以下のプログラムは、前置インクリメント演算子の基本的な使用法を示しています。
// 基本的な使用法 let x = 5; let y = ++x; // y は 6、x は 6 console.log(x); // 6 console.log(y); // 6
このプログラムでは、x
の値が 1 増加し、y
には増加後の値が代入されます。
ループでの使用
以下のプログラムは、ループ内で前置インクリメント演算子を使用する例を示しています。
// ループでの使用 for (let i = 0; i < 5; ++i) { console.log(i); // 0, 1, 2, 3, 4 }
このプログラムでは、ループの各反復で i
の値が 1 増加します。++i
は、ループの反復ごとに i
を更新するために使用されます。
オブジェクトのプロパティでの使用
以下のプログラムは、オブジェクトのプロパティに対して前置インクリメント演算子を使用する例を示しています。
// オブジェクトのプロパティでの使用 const obj = { count: 0 }; ++obj.count; // obj.count は 1 になる console.log(obj.count); // 1
このプログラムでは、obj.count
の値が 1 増加します。
配列の要素での使用
以下のプログラムは、配列の要素に対して前置インクリメント演算子を使用する例を示しています。
// 配列の要素での使用 const arr = [10, 20, 30]; let index = 0; ++arr[index]; // arr[0] は 11 になる console.log(arr); // [11, 20, 30]
このプログラムでは、arr[index]
の値が 1 増加します。
式内での使用
以下のプログラムは、式内で前置インクリメント演算子を使用する例を示しています。
// 式内での使用 let x = 5; let y = 10; let z = ++x + y; // z は 16、x は 6 console.log(x); // 6 console.log(z); // 16
このプログラムでは、++x
が評価されて 6
となり、それに y
の値 10
が加算されて z
に 16
が代入されます。
注意点
- 副作用: 前置インクリメント演算子は、オペランドの値を変更するため、副作用があります。式の中で使用する場合、その副作用に注意が必要です。
- 数値以外のオペランド: オペランドが数値でない場合、JavaScript は自動的に数値に変換しようとします。例えば、文字列
"5"
は数値5
に変換されます。 - 定数への使用:
const
で宣言された変数に対しては、前置インクリメント演算子を使用できません(再代入できないため)。
後置インクリメント演算子との違い
前置インクリメント演算子 (++ (前置)
) と後置インクリメント演算子 (++ (前置)
) の主な違いは、以下の通りです:
- 前置インクリメント: 値を増加させた後に返す。
- 後置インクリメント: 値を返した後に増加させる。
例:
let x = 5; let y = ++x; // y は 6、x は 6 let a = 5; let b = a++; // b は 5、a は 6
脚註
- ↑ 前置インクリメント演算子は、式の評価前に値を増加させるため、式の結果に影響を与えます。