代入演算子

代入演算子 (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

べき乗代入

べき乗代入演算子は、変数の値を右オペランドの値でべき乗を行った結果を返します。詳しくはべき乗演算子をご覧ください。

構文

演算子: 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 回評価される

仕様書

仕様書
ECMAScript (ECMA-262)
Assignment operators の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Assignment (x = y)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応

関連情報