Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

代入演算子

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

べき乗代入

This is an experimental technology, part of the ECMAScript 2016 (ES7) proposal.
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future version of browsers as the spec changes.

べき乗代入演算子は、第 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 回評価される

仕様

仕様書 策定状況 コメント
ECMAScript 2017 Draft (ECMA-262)
Assignment operators の定義
ドラフト  
ECMAScript 2015 (6th Edition, ECMA-262)
Assignment operators の定義
標準  
ECMAScript 5.1 (ECMA-262)
Assignment operators の定義
標準  
ECMAScript 1st Edition (ECMA-262)
Assignment operators の定義
標準 最初期の定義

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連情報

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: yyss, teoli, ethertank, Potappo
 最終更新者: yyss,