代入演算子 (Assignment operator) は、右オペランドの値を左オペランドに代入します。
概要
基本となる代入演算子はイコール (=) で、右オペランドの値を左オペランドに代入します。たとえば x = y ならば y の値を x に代入します。他には通常の演算を短縮した代入演算子があり、以下の表に示します。
| 名称 | 短縮表記した演算子 | 意味 |
|---|---|---|
| 代入 | x = y |
x = y |
| 加算代入 | x += y |
x = x + y |
| 減算代入 | x -= y |
x = x - y |
| 乗算代入 | x *= y |
x = x * y |
| 除算代入 | x /= y |
x = x / y |
| 剰余代入 | x %= y |
x = x % y |
| べき乗代入 | x **= y |
x = x ** y |
| 左シフト代入 | x <<= y |
x = x << y |
| 右シフト代入 | x >>= y |
x = x >> y |
| 符号なし右シフト代入 | x >>>= y |
x = x >>> y |
| ビットごとの AND 代入 | x &= y |
x = x & y |
| ビットごとの XOR 代入 | x ^= y |
x = x ^ y |
| ビットごとの OR 代入 | x |= y |
x = x | y |
代入
値を変数に代入する、シンプルな代入演算子です。代入演算子は、代入した値を返します。ひとつの値を複数の変数に代入するため、代入演算子を連鎖することができます。例をご覧ください。
構文
演算子: x = y
例
// 以下の変数があると想定する // x = 5 // y = 10 // z = 25 x = y // x は 10 になる x = y = z // x、y、z はすべて 25 になる
加算代入
加算代入演算子は右オペランドの値を変数に加算して、その結果を変数に代入します。2 つのオペランドの型は、加算演算子の動作に基づいて決定します。加算または連結を実行できます。詳しくは加算演算子をご覧ください。
構文
演算子: x += y 意味: x = x + y
例
// 以下の変数があると想定する // foo = "foo" // bar = 5 // baz = true // 数値 + 数値 -> 加算 bar += 2 // 7 // 論理値 + 数値 -> 加算 baz += 1 // 2 // 論理値 + 論理値 -> 加算 baz += false // 1 // 数値 + 文字列 -> 連結 bar += "foo" // "5foo" // 文字列 + 論理値 -> 連結 foo += false // "foofalse" // 文字列 + 文字列 -> 連結 foo += "bar" // "foobar"
減算代入
減算代入演算子は変数から右オペランドの値を減算して、その結果を変数に代入します。詳しくは減算演算子をご覧ください。
構文
演算子: x -= y 意味: x = x - y
例
// 以下の変数があると想定する // bar = 5 bar -= 2 // 3 bar -= "foo" // NaN
乗算代入
乗算代入演算子は右オペランドの値と変数の値で乗算を行って、その結果を変数に代入します。詳しくは乗算演算子をご覧ください。
構文
演算子: x *= y 意味: x = x * y
例
// 以下の変数があると想定する // bar = 5 bar *= 2 // 10 bar *= "foo" // NaN
除算代入
除算代入演算子は変数の値と右オペランドの値で除算を行って、その結果を変数に代入します。詳しくは除算演算子をご覧ください。
構文
演算子: x /= y 意味: x = x / y
例
// 以下の変数があると想定する // bar = 5 bar /= 2 // 2.5 bar /= "foo" // NaN bar /= 0 // Infinity
剰余代入
剰余代入演算子は変数の値と右オペランドの値で除算を行って、剰余を変数に代入します。詳しくは剰余演算子をご覧ください。
構文
演算子: x %= y 意味: x = x % y
例
// 以下の変数があると想定する // bar = 5 bar %= 2 // 1 bar %= "foo" // NaN bar %= 0 // NaN
べき乗代入
べき乗代入演算子は、第 1 オペランドと第 2 オペランドでべき乗を行った結果を返します。詳しくはべき乗演算子をご覧ください。
構文
演算子: x **= y 意味: x = x ** y
例
// 以下の変数があると想定する // bar = 5 bar **= 2 // 25 bar **= "foo" // NaN
左シフト代入
左シフト代入演算子は、指定したビット数の分左にシフトした結果を変数に代入します。詳しくは左シフト演算子をご覧ください。
構文
演算子: x <<= y 意味: x = x << y
例
var bar = 5; // (00000000000000000000000000000101) bar <<= 2; // 20 (00000000000000000000000000010100)
右シフト代入
右シフト代入演算子は、指定したビット数の分右にシフトした結果を変数に代入します。詳しくは右シフト演算子をご覧ください。
構文
演算子: x >>= y 意味: x = x >> y
例
var bar = 5; // (00000000000000000000000000000101) bar >>= 2; // 1 (00000000000000000000000000000001) var bar -5; // (-00000000000000000000000000000101) bar >>= 2; // -2 (-00000000000000000000000000000010)
符号なし右シフト代入
符号なし右シフト代入演算子は、指定したビット数の分右にシフトした結果を変数に代入します。詳しくは符号なし右シフト演算子をご覧ください。
構文
演算子: x >>>= y 意味: x = x >>> y
例
var bar = 5; // (00000000000000000000000000000101) bar >>>= 2; // 1 (00000000000000000000000000000001) var bar = -5; // (-00000000000000000000000000000101) bar >>>= 2; // 1073741822 (00111111111111111111111111111110)
ビットごとの AND 代入
ビットごとの AND 代入演算子は双方のオペランドの二進法表記を使用して、ビットごとの AND 演算を行った結果を変数に代入します。詳しくはビットごとの AND 演算子をご覧ください。
構文
演算子: x &= y 意味: x = x & y
例
var bar = 5; // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 bar &= 2; // 0
ビットごとの XOR 代入
ビットごとの XOR 代入演算子は双方のオペランドの二進法表記を使用して、ビットごとの XOR 演算を行った結果を変数に代入します。詳しくはビットごとの XOR 演算子をご覧ください。
構文
演算子: x ^= y 意味: x = x ^ y
例
var bar = 5; bar ^= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111
ビットごとの OR 代入
ビットごとの OR 代入演算子は双方のオペランドの二進法表記を使用して、ビットごとの OR 演算を行った結果を変数に代入します。詳しくはビットごとの OR 演算子をご覧ください。
構文
演算子: x |= y 意味: x = x | y
例
var bar = 5; bar |= 2; // 7 // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 // ----------------------------------- // 7: 00000000000000000000000000000111
例
別の代入演算子を含む左オペランド
特殊な状況では、代入演算子 (例えば x += y) と意味する式 (ここでは x = x + y) が同一にはなりません。代入演算子自身の左オペランドに別の代入演算子を含むとき、左オペランドは一度だけ評価されます。例を挙げます:
a[i++] += 5 // i は 1 回だけ評価される a[i++] = a[i++] + 5 // i は 2 回評価される
仕様
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | (有) | (有) | (有) | (有) | (有) |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本サポート | (有) | (有) | (有) | (有) | (有) | (有) |