「JavaScript/演算子」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
s/source/syntaxhighlight/g; →‎グループ化演算子
Ef3 (トーク | 投稿記録)
→‎複合代入演算子: →‎分割代入: 節追加。 冪乗代入演算子 (**=)追加。剰余は modulus ではなく remainder。
340 行
 
== 代入演算子 ==
: ''{{See|[[JavaScript/変数]]も参照''}}
'''代入演算子'''(だいにゅうえんざんし、''assignment operator'')は変数に値を代入します。代入した値を返し、結合は右から左で<ref>[https://tc39.es/ecma262/#sec-assignment-operators ECMA-262::13.15 Assignment Operators]
</ref>。
 
<syntaxhighlight lang="javascript" line>
let x = 0;
console.log(x = 1); // 1
alert( x = 1 ); // アラートダイアログボックスに 1 と表示
 
let a, b;
a = b = 0;
</syntaxhighlight>
 
=== 複合代入演算子 ===
<code>''x'' = ''x'' + ''y''</code>のように自分自身に値を代入する演算は、<code>''x'' += ''y''</code>のように短縮表記することができます(自己代入演算子)。たとえば、<code>''x'' *= ''y''</code>は<code>''x'' = ''x'' * ''y''</code>と等価です。
複合代入演算子(ふくごうだいにゅうえんざんし、Compound assignment operators)は、<syntaxhighlight lang="javascript" inline>x = x OPERATOR y</syntaxhighlight>の形式を<syntaxhighlight lang="javascript" inline>x OPERATOR= y</syntaxhighlight>の形式に短縮表記したものです。代入演算子と同じ優先度を持ち、演算し代入した値を返し、結合は右から左です。<syntaxhighlight lang="javascript" inline>OPERATOR=</syntaxhighlight>で1つのトークンで、<syntaxhighlight lang="javascript" inline>OPERATOR</syntaxhighlight>と<syntaxhighlight lang="javascript" inline>=</syntaxhighlight>の間に空白を含めることはできません。
例えば、<syntaxhighlight lang="javascript" inline>x *= y</syntaxhighlight>は<syntaxhighlight lang="javascript" inline>x = x * y</syntaxhighlight>と等価です。
 
<syntaxhighlight lang="javascript">
362 ⟶ 368行目:
! 意味
|-
| <syntaxhighlight lang="javascript" inline>x += y</syntaxhighlight>
| <code>''x'' += ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x + y</syntaxhighlight>
| <code>''x'' = ''x'' + ''y''</code>
| 加算代入演算子 (assignmentAddition byassignment additionoperator)
|-
| <syntaxhighlight lang="javascript" inline>x -= y</syntaxhighlight>
| <code>''x'' -= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x - y</syntaxhighlight>
| <code>''x'' = ''x'' - ''y''</code>
| 減算代入演算子 (assignmentSubtraction byassignment subtractionoperator)
|-
| <syntaxhighlight lang="javascript" inline>x *= y</syntaxhighlight>
| <code>''x'' *= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x * y</syntaxhighlight>
| <code>''x'' = ''x'' * ''y''</code>
| 乗算代入演算子 (assignmentMultiplication byassignment multiplicationoperator)
|-
| <syntaxhighlight lang="javascript" inline>x /= y</syntaxhighlight>
| <code>''x'' /= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x / y</syntaxhighlight>
| <code>''x'' = ''x'' / ''y''</code>
| 除算代入演算子 (assignmentDivision byassignment divisionoperator)
|-
| <syntaxhighlight lang="javascript" inline>x %= y</syntaxhighlight>
| <code>''x'' %= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x % y</syntaxhighlight>
| <code>''x'' = ''x'' % ''y''</code>
| 剰余代入演算子 (assignmentRemainder byassignment modulusoperator)
|-
| <syntaxhighlight lang="javascript" inline>x **= y</syntaxhighlight>
| <code>''x'' <<= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x ** y</syntaxhighlight>
| <code>''x'' = ''x'' << ''y''</code>
| 左シフト冪乗代入演算子 (left shiftExponentiation assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x <<= y</syntaxhighlight>
| <code>''x'' >>= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x << y</syntaxhighlight>
| <code>''x'' = ''x'' >> ''y''</code>
| 符号維持右シフト代入演算子 (rightLeft shift assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x >>= y</syntaxhighlight>
| <code>''x'' >>>= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x >> y</syntaxhighlight>
| <code>''x'' = ''x'' >>> ''y''</code>
| 0埋め右シフト代入演算子 (zero-fill rightRight shift assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x >>>= y</syntaxhighlight>
| <code>''x'' &= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x >>> y</syntaxhighlight>
| <code>''x'' = ''x'' & ''y''</code>
| ビッ符号なし右シフごとのAND代入演算子 (bitwiseUnsigned ANDright shift assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x &= y</syntaxhighlight>
| <code>''x'' ^= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x & y</syntaxhighlight>
| <code>''x'' = ''x'' ^ ''y''</code>
| ビットごとのXOR間論理積代入演算子 (bitwiseBitwise XORAND assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x ^= y</syntaxhighlight>
| <code>''x'' <nowiki>|</nowiki>= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x ^ y</syntaxhighlight>
| <code>''x'' = ''x'' <nowiki>|</nowiki> ''y''</code>
| ビットごとのOR間排他的論理和代入演算子 (bitwiseBitwise ORXOR assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x |= y</syntaxhighlight>
| <code>''x'' <nowiki>||</nowiki>= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x | y</syntaxhighlight>
| <code>''x'' = ''x'' <nowiki>||</nowiki> ''y''</code>
| ビット間論理和代入演算子 (BooleanBitwise OR assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x &&= y</syntaxhighlight>
| <code>''x'' &&= ''y''</code>
| <syntaxhighlight lang="javascript" inline>x = x && y</syntaxhighlight>
| <code>''x'' = ''x'' <nowiki>|</nowiki> ''y''</code>
| 論理積代入演算子 (BooleanLogical AND assignment operator)
|-
| <syntaxhighlight lang="javascript" inline>x ||= y</syntaxhighlight>
| <syntaxhighlight lang="javascript" inline>x = x || y</syntaxhighlight>
| 論理和代入演算子 (Logical OR assignment operator)
|}
 
=== 分割代入 ===
<!--- 論理和代入と論理積代入は ES5 には既にあったと記憶しているが、いつの時代の記述だろう?
分割代入(ぶんかつだいにゅう、Destructuring assignment)は、配列の値やオブジェクトのプロパティを個別の変数に展開することができるJavaScriptの表現方法です<ref>[https://tc39.es/ecma262/#sec-destructuring-assignment ECMA-262::13.15.5 Destructuring Assignment]</ref>。
ただし、<code>''x'' = ''x'' && ''y''</code>と等価な<code>''x'' &&= ''y''</code>や、<code>''x'' = ''x'' || ''y''</code>と等価な<code>''x'' ||= ''y''</code>などはありません。代わりに<code>if ( ''x'' ) ''x'' = ''y''</code>や<code>if ( !''x'' ) ''x'' = ''y''</code>を使用してください。<code>''x'' += 1</code>は<code>''x''++</code>と等価であり、<code>''x'' -= 1</code>は<code>''x''--</code>と等価です。 -->
<syntaxhighlight lang="javascript" line>
let x,y;
[x, y] = [2, 3];
 
console.log(x); // 2
console.log(y); // 3
 
let a, b;
({ a, b } = { a: 12, b: 21 }); // 括弧がないとブロック文と解されてしまう。
console.log(a); // 12
console.log(b); // 21
 
[a, b] = [b, a]
console.log(a); // 21
console.log(b); // 12
</syntaxhighlight>
 
== 論理演算子 ==