代入演算子
代入演算子は左オペランドに右オペランドの値を基に代入を行います。
説明
基本的な代入演算子は等価(=
)であり、これは右のオペランドを左のオペランドへ代入します。
つまり、x = y
であればx
へy
の値を代入します。
その他の代入演算子は、通常は下記の定義と例で確認できるような、
標準演算子への略記となります。
名前 | 略記演算子 | 意味 |
---|---|---|
代入 | 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 |
ビット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 // 0
// 数値 + 文字列 -> 連結
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
/** 例 **/
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代入演算子は、両方のオペランドの2進数表記を使用してビットAND演算を行い、 変数にその結果を割り当てます。 詳細については、ビットAND演算を参照してください。
/** 文法 **/
x &= y //意味: x = x & y
/** 例 **/
var bar = 5;
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
bar &= 2; // 0
ビットXOR代入
ビットXOR代入演算子は、両方のオペランドの2進数表記を使用してビットXOR演算を行い、 変数にその結果を割り当てます。 詳細については、ビットXOR演算を参照してください。
/** 文法 **/
x ^= y //意味: x = x ^ y
/** 例 **/
var bar = 5;
bar ^= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
ビットOR代入
ビットOR代入演算子は、両方のオペランドの2進数表記を使用してビットOR演算を行い、 変数にその結果を割り当てます。 詳細については、ビットOR演算を参照してください。
/** 文法 **/
x |= y //意味: x = x | y
/** 例 **/
var bar = 5;
bar |= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
例
別の代入演算子を使用する左オペランド
稀に代入演算子(例えば、x += y
)が、
それを意味する式(ここでの例えでは、x = x + y
)と一致しないことがあります。
代入演算子の左オペランド自身が代入演算子を含む場合、左オペランドは1度だけ評価されます。
下記はその例になります。
a[i++] += 5 // iは1度だけ評価されます。
a[i++] = a[i++] + 5 // iは2度評価されます。
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。