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

削除された内容 追加された内容
→‎算術演算子: 内容追加(べき乗演算子)
タグ: モバイル編集 モバイルウェブ編集
M fix lint error (use script)
41 行
'''加算演算子'''(かさんえんざんし、''addition operator'')は<code>+</code>です。
 
<sourcesyntaxhighlight lang="javascript">
var two = 1 + 1; // 変数twoを1+1で宣言するとtwoは2となる
alert(two); // 2
</syntaxhighlight>
</source>
 
=== 減算 ===
'''減算演算子'''(げんざんえんざんし、げんさんえんざんし、''subtraction operator'')は<code>-</code>です。
 
<sourcesyntaxhighlight lang="javascript">
var minus_one = 0 - 1; // 変数minus_oneを0-1で宣言するとminus_oueは-1となる
alert(minus_one); // -1
</syntaxhighlight>
</source>
 
=== 乗算 ===
'''乗算演算子'''(じょうざんえんざんし、じょうさんえんざんし、''multiplication operator'')は<code>*</code>です。
 
<sourcesyntaxhighlight lang="javascript">
var four = 2 * 2; // 変数fourを2×2で宣言するとfourは4となる
alert(four); // 4
</syntaxhighlight>
</source>
 
=== 除算 ===
'''除算演算子'''(じょざんえんざんし、じょさんえんざんし、''division operator'')は<code>/</code>です。
 
<sourcesyntaxhighlight lang="javascript">
var one_half = 1 / 2; // 変数one_halfを1÷2で宣言するとone_halfは0.5となる
alert(one_half); // 0.5
</syntaxhighlight>
</source>
 
ゼロ除算(ゼロじょざん、ゼロじょさん、''division by zero'')は[[JavaScript/例外処理|例外]]ではなく<code>[[JavaScript/Number#Infinity|Infinity]]</code>(あるいは<code>-Infinity</code>)を返します。
 
<sourcesyntaxhighlight lang="javascript">
alert( 1 / 0 ); // Infinity
alert( -2 / 0 ); // -Infinity
alert( 3 /-0 ); // -Infinity
alert( -3 /-0 ); // Infinity
</syntaxhighlight>
</source>
 
被除数ゼロによるゼロ除算は<code>[[JavaScript/Number#NaN|NaN]]</code>を返します。
 
<sourcesyntaxhighlight lang="javascript">
alert( 0 / 0 ); // NaN
</syntaxhighlight>
</source>
 
=== 剰余 ===
'''剰余演算子'''(じょうよえんざんし、''modulus operator'')は<code>%</code>です。<math>\cdots</math>やmod、rem、\、\\などではありません。割り算の余りを求めます。
 
<sourcesyntaxhighlight lang="javascript">
var one = 10 % 3; // 10÷3は3余り1なので変数oneは1となる
alert(one); // 1
</syntaxhighlight>
</source>
 
結果は必ず左オペランドの被除数(割られる数)と同じ符号になります。
 
<sourcesyntaxhighlight lang="javascript">
var minus_one = -10 % 3;
alert(minus_one); // -1
</syntaxhighlight>
</source>
 
ゼロ剰余(ゼロじょうよ、''modulo by zero'')は例外ではなく<code>NaN</code>を返します。
 
<sourcesyntaxhighlight lang="javascript">
alert( 0 % 0 ); // NaN
</syntaxhighlight>
</source>
 
<code>''a'' % ''b''</code>は<code>''a'' - ''b'' * [[JavaScript/Math/floor|Math.floor]](''a'' / ''b'')</code>と等価です。
111 行
'''単項マイナス演算子'''(たんこうマイナスえんざんし、''unary negation operator'')は符号を反転させた数([[w:反数|反数]])を返します。'''符号反転演算子'''(ふごうはんてんえんざんし)、'''算術否定演算子'''(さんじゅつひていえんざんし)などという言い方をする人もいます。
 
<sourcesyntaxhighlight lang="javascript">
var one = 1;
alert(-one); // -1
</syntaxhighlight>
</source>
 
<code>-''a''</code>は<code>''a'' *= -1</code>、すなわち<code>''a'' = ''a'' * -1</code>と等価です。
121 行
'''インクリメント演算子'''(インクリメントえんざんし、''increment operator'')は変数の値を1増やします。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
x++;
alert(x); // 1
</syntaxhighlight>
</source>
 
インクリメント演算子は後置<code>++</code>すると増やす前の値を返し、
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
var y = x++;
alert(y); // 0
alert(x); // 1
</syntaxhighlight>
</source>
 
<code>++</code>前置すると増やした後の値を返します。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
var y = ++x;
alert(y); // 1
alert(x); // 1
</syntaxhighlight>
</source>
 
複数のインクリメント演算子を同時に適用することはできません。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
(x++)++; // 構文エラー
</syntaxhighlight>
</source>
 
<code>''x''++</code>は<code>''x'' += 1</code>、すなわち<code>''x'' = ''x'' + 1</code>と等価です。インクリメント演算子は変数の値を増加させるので、<code>1++</code>のようにリテラル(定数)に対して適用することはできません。
157 行
'''デクリメント演算子'''(デクリメントえんざんし、''decrement operator'')は変数の値を1減らします。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
x--;
alert(x); // -1
</syntaxhighlight>
</source>
 
デクリメント演算子は後置<code>--</code>すると減らす前の値を返し、
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
var y = x--;
alert(y); // 0
alert(x); // -1
</syntaxhighlight>
</source>
 
<code>--</code>前置すると減らした後の値を返します。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
var y = --x;
alert(y); // -1
alert(x); // -1
</syntaxhighlight>
</source>
 
複数のデクリメント演算子を同時に適用することはできません。
 
<sourcesyntaxhighlight lang="javascript">
var x = 0;
(x--)--; // 構文エラー
</syntaxhighlight>
</source>
 
<code>''x''--</code>は<code>''x'' -= 1</code>、すなわち<code>''x'' = ''x'' - 1</code>と等価です。デクリメント演算子は変数の値を減少させるので、<code>1--</code>のようにリテラル(定数)に対して適用することはできません。
193 行
冪乗''a<sup>x</sup>''を計算するには<code>[[JavaScript/Math/pow|Math.pow]](''a'', ''x'')</code>を使用します。平方根は<code>[[JavaScript/Math/sqrt|Math.sqrt]](''a'')</code>、(自然)対数は<code>[[JavaScript/Math/log|Math.log]](''x'')</code>です。
 
<sourcesyntaxhighlight lang="javascript">
var power = Math.pow(2, 10); // es2016からは 2 ** 10とも書けます
alert(power); // 1024
</syntaxhighlight>
</source>
 
なお、<code>^</code>はビットごとのXOR演算子です。
235 行
<code>+</code>は加算演算子であると同時に、'''文字列連結演算子'''(もじれつれんけつえんざんし、''string concatenation operator'')でもあります。
 
<sourcesyntaxhighlight lang="javascript">
var str = "Wiki" + "books";
alert(str); // "Wikibooks"
</syntaxhighlight>
</source>
 
文字列と数値を連結すると、文字列の方が強いので数値は文字列に変換されます。
 
<sourcesyntaxhighlight lang="javascript">
var str = "JavaScript " + 1.5;
alert(str); // "JavaScript 1.5"
</syntaxhighlight>
</source>
 
これは足し算をしようとして文字列がまじっていると厄介なことになります。
 
<sourcesyntaxhighlight lang="javascript">
var one = "1";
var two = one + 1;
alert(two); // "11" -- あれれ?
</syntaxhighlight>
</source>
 
文字列の連結よりも数値の加算を優先させるには、文字列を数値に変換した上で加算しなければなりません。文字列を数値に変換するには、教科書的には[[JavaScript/parseInt|parseInt]]関数や[[JavaScript/parseFloat|parseFloat]]関数、[[JavaScript/Number|Number]]オブジェクトのコンストラクタなどを使いますが、
 
<sourcesyntaxhighlight lang="javascript">
var one = "1";
var two = parseInt(one) + 1;
alert(two); // 2
</syntaxhighlight>
</source>
 
一般的には単項プラス演算子を使用した方が高速です。
 
<sourcesyntaxhighlight lang="javascript">
var one = "1";
var two = +one + 1;
alert(two); // 2
</syntaxhighlight>
</source>
 
ほかにも1を掛ける (<code>one * 1</code>)、0を引く (<code>one - 0</code>)、0で0埋め右シフトをする (<code>one >>> 0</code>)、補数の補数を求める (<code>~~one</code>) などの方法があります。これらの演算子は数値にしか適用できないので、処理系が被演算子を自動的に数値に変換するためです。
277 行
'''代入演算子'''(だいにゅうえんざんし、''assignment operator'')は変数に値を代入し、代入した値を返します。
 
<sourcesyntaxhighlight lang="javascript">
var x;
alert( x = 0 ); // "0" と警告
</syntaxhighlight>
</source>
 
<code>''x'' = ''x'' + ''y''</code>のように自分自身に値を代入する演算は、<code>''x'' += ''y''</code>のように短縮表記することができます。たとえば、<code>''x'' *= ''y''</code>は<code>''x'' = ''x'' * ''y''</code>と等価です。
 
<sourcesyntaxhighlight lang="javascript">
var x = 1;
x += 1; // x = x + 1
alert(x); // 2
</syntaxhighlight>
</source>
 
{| class="wikitable"
406 行
<code>==</code>演算子は被演算子に真偽値が含まれる場合は、それを数値に変換して比較します。たとえば、
 
<sourcesyntaxhighlight lang="javascript">
Number(false); // 0
Number(true); // 1
</syntaxhighlight>
</source>
 
なので<code>null == false</code>は<code>null == 0</code>に変換され<code>false</code>を返します。このことから、<code>x == false</code>と<code>!x</code>は必ずしも等しい条件式にならないので注意してください(<code>x</code>が<code>null</code>の場合、前者は<code>false</code>、後者は<code>true</code>を返す)。
472 行
'''typeof演算子'''(タイプオブえんざんし、''typeof operator'')はデータ型を返します。
 
<sourcesyntaxhighlight lang="javascript">
typeof 42; // "number"
typeof "Hello, world!"; // "string"
typeof new Array(); // "array"
typeof {}; // "object"
</syntaxhighlight>
</source>
 
== 結合性 ==