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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎剰余: プログラムを例示。IEEE754 の Remainder に定義された挙動。s/modulo/REMAINDER/
Ef3 (トーク | 投稿記録)
演算子はメソッドでは有りません。演算子はメソッド異なりオーバーロード出来ません。→‎単項プラス: 追加
1 行
'''[[w:演算子|演算子]]'''(えんざんし、''operator'')とは、<code>2 + 3</code>の<code>+</code>のように、[[w:演算|演算]]を表す記号のことです。2や3は'''被演算子'''(ひえんざんし、''operand''、'''オペランド''')といいます。JavaScriptには算術演算子以外にもさまざまな演算子があります。[[JavaScript/var|変数]]の代入で使用した<code>=</code>も演算子の一種ですし、コンマ<code>,</code>も演算子の一種です。
演算子はメソッドでは有りません。
演算子はメソッド異なりオーバーロード出来ません。
 
== 算術演算子 ==
:&nbsp; ''[[JavaScript/Number|数値]]も参照''
[[w:加法|加算]] (<code>+</code>)、[[w:減法|減算]] (<code>-</code>)、[[w:乗算|乗算]] (<code>*</code>)、[[w:除算|除算]] (<code>/</code>) の四則演算をはじめとする基本的な算術演算子が存在します。[[JavaScript/Number|数値]]は常に浮動小数点数として扱われます。
BigIntにも演算子を適用できますが、算術演算子の場合両方のオペランドが一致している必要があります。
数値の演算で NaN を返すケースは、BigIntではErrorとなります(例えばゼロ除算は数値ではNaNを返しますが、BigInt同士ではRangeErrorがthrowされます)。
 
{| class="wikitable"
27 ⟶ 31行目:
| <code>''a'' ** ''b''</code>
| べき乗
|-
| <code>+''a''</code>
| 単項プラス(数値化)
|-
| <code>-''a''</code>
71 ⟶ 78行目:
 
ゼロ除算(ゼロじょざん、ゼロじょさん、''division by zero'')は[[JavaScript/例外処理|例外]]ではなく<code>[[JavaScript/Number#Infinity|Infinity]]</code>(あるいは<code>-Infinity</code>)を返します。
BigInt 同士のゼロ除算は RangeError となります。
 
<syntaxhighlight lang="javascript">
77 ⟶ 85行目:
alert( 3 /-0 ); // -Infinity
alert( -3 /-0 ); // Infinity
alert( 1n / 0n ); // RangeError: Division by zero
</syntaxhighlight>
 
除数・被除数ともゼロとなる除算は<code>[[JavaScript/Number#NaN|NaN]]</code>を返します。
BigInt 同士の除数・被除数ともゼロの除算は RangeError となります。
 
<syntaxhighlight lang="javascript">
alert( 0 / 0 ); // NaN
alert( 0n / 0n ); // RangeError: Division by zero
</syntaxhighlight>
 
101 ⟶ 112行目:
 
ゼロ剰余(ゼロじょうよ、''REMAINDER by zero'')は例外ではなく<code>NaN</code>を返します。
BigInt 同士の剰余は RangeError となります。
 
<syntaxhighlight lang="javascript">
alert( 010 % 0 ); // NaN
alert( 10n % 0n ); // RangeError: Division by zero
</syntaxhighlight>
 
131 ⟶ 144行目:
const theta = Math.PI / 4;
alert(Math.sin(theta)===Math.sin(theta % (2 * Math.PI))); // true
</syntaxhighlight>
 
=== 単項プラス ===
'''単項プラス演算子'''(たんこうマイナスえんざんし、''unary plus operator'')は式を評価し、数値でなかった場合は暗黙な変換に従い数値に変換します。
 
<syntaxhighlight lang="javascript">
const two = "2";
alert(+two); // 2
</syntaxhighlight>
 
141 ⟶ 162行目:
</syntaxhighlight>
 
<code>''a'' * -1</code>と等価で似ていますが BigInt が渡されても TypeError とはならない点が異なります。
<!-- 単項マイナス演算子は、デクリメント演算子と異なり左辺値式を取らない
<code>-''a''</code>は<code>''a'' *= -1</code>、すなわち<code>''a'' = ''a'' * -1</code>と等価です。-->
257 ⟶ 278行目:
|}
 
<code>''a'' >>> ''b''</code>は捨てられたビットの分だけ左から0を詰めます。
<code>' >>> </code>は BigInt に適用すると TypeError になります。
ビット演算子は算術演算子よりも優先順位が低いことに注意してください。
 
[[JavaScript/ビット演算]]も参照して下さい。
281 ⟶ 304行目:
const one = "1";
const two = one + 1;
alert(two); // "11" -- あれれ?alert()メソッドではわかりにくいですが、2文字の文字列です。
</syntaxhighlight>
 
306 ⟶ 329行目:
 
<source lang="javascript">
"3.14" >>> 0 === 3
"-3.14" >>> 0 === 4294967293
~~"3.14" === 3