算術演算子は数値 (または文字列や変数) をオペランドとして扱い、1 つの数値 (または文字列や変数) を返します。標準的な算術演算子には加算 (+)、減算 (-)、乗算 (*)、除算 (/)があります。
加算 (+)
加算演算子は数値の合計または文字列の連結を行います。
構文
演算子: x + y
例
// Number + Number -> 加算 1 + 2 // 3 // Boolean + Number -> 加算 true + 1 // 2 // Boolean + Boolean -> 加算 false + false // 0 // Number + String -> 連結 5 + 'foo' // "5foo" // String + Boolean -> 連結 'foo' + false // "foofalse" // String + String -> 連結 'foo' + 'bar' // "foobar"
減算 (-)
減算演算子は 1 つの数値から 1 つの数値を差し引き、差を返します。
構文
演算子: x - y
例
5 - 3 // 2 3 - 5 // -2 'foo' - 3 // NaN
除算 (/)
除算演算子は左のオペランドを右のオペランドで割り引くことで商を返します。
構文
演算子: x / y
例
1 / 2 // JavaScript では 0.5 を返す 1 / 2 // Java では 0 を返す // (どちらの数値も明確な浮動小数点数ではありません) 1.0 / 2.0 // JavaScript および Java のどちらも 0.5 を返す 2.0 / 0 // JavaScript では Infinity を返す 2.0 / 0.0 // こちらも Infinity を返す 2.0 / -0.0 // JavaScript では -Infinity を返す
乗算 (*)
乗算演算子は数値を掛けあわせた結果を返します。
構文
演算子: x * y
例
2 * 2 // 4 -2 * 2 // -4 Infinity * 0 // NaN Infinity * Infinity // Infinity 'foo' * 2 // NaN
剰余 (%)
剰余演算子は 1 つ目の数値を 2 つ目の数値で割った余りを返します。剰余は常に被除数の符号を採用します。
構文
演算子: var1 % var2
例
12 % 5 // 2 -1 % 2 // -1 1 % -2 // 1 NaN % 2 // NaN 1 % 2 // 1 2 % 3 // 2 -4 % 2 // -0 5.5 % 2 // 1.5
べき乗 (**)
べき乗演算子は、 1 つ目の数値を 2 つ目の数値でべき乗した値を返します。つまり var1var2 といった形になります。ここで var1 および var2 は変数です。べき乗演算子は右結合です。a ** b ** c と a ** (b ** c) は同じ値を返します。
構文
演算子: var1 ** var2
補足
PHP や Python やその他の言語にも ^ や ** といったべき乗の演算子がありますが、べき乗は通常 - や + といった単項演算子よりも優先されます。しかし、いくつか例外があります。例えば Bash では、 ** 演算子は単項演算子よりも低い優先順位となっています。 JavaScript では、あいまいなべき乗の式を書くことができません。すなわち、単項演算子 (+/-/~/!/delete/void/typeof) を底の直前に置くことができません。
-2 ** 2; // Bash では 4、ほかの言語では -4 です。 // 演算子があいまいであるため、 JavaScript では無効です。 -(2 ** 2); // JavaScript では -4 であり、作成者の意図が明確です。
例
2 ** 3 // 8 3 ** 2 // 9 3 ** 2.5 // 15.588457268119896 10 ** -1 // 0.1 NaN ** 2 // NaN 2 ** 3 ** 2 // 512 2 ** (3 ** 2) // 512 (2 ** 3) ** 2 // 64
べき乗演算の結果の符号を反転するには以下のようにします:
-(2 ** 2) // -4
べき乗演算の底を強制的に負の数にするには以下のようにします:
(-2) ** 2 // 4
メモ: JavaScript には ビット演算子 ^ (XOR 論理演算) もあります。 ** と ^ は異なります (例: 2 ** 3 === 8 ですが、 2 ^ 3 === 1 です)。
インクリメント (++)
インクリメント演算子は数値を 1 ずつ加算し、値を返します。
- オペランドの後に演算子を置く後置記法 (例: x++) で使った場合、加算する前の値を返します。
- オペランドの前に演算子を置く前置記法 (例: ++x) で使った場合、加算した後の値を返します。
構文
演算子: x++ or ++x
例
// 後置記法 var x = 3; y = x++; // y = 3, x = 4 // 前置記法 var a = 2; b = ++a; // a = 3, b = 3
デクリメント (--)
デクリメント演算子は数値を 1 ずつ減算し、値を返します。
- オペランドの後に演算子を置く後置記法 (例: x--) で使った場合、減算する前の値を返します。
- オペランドの前に演算子を置く前置記法 (例: --x) で使った場合、減算した後の値を返します。
構文
Operator: x-- or --x
例
// 後置記法 var x = 3; y = x--; // y = 3, x = 2 // 前置記法 var a = 2; b = --a; // a = 1, b = 1
単項マイナス (-)
単項マイナス演算子は、オペランドの前に置き、値を負にします。
構文
演算子: -x
例
var x = 3; y = -x; // y = -3, x = 3 // Unary negation operator can convert non-numbers into a number var x = "4"; y = -x; // y = -4
単項プラス (+)
単項プラス演算子はオペランドの前に置かれてオペランドを評価しますが、数値ではない値を数値に変換しようとします。単項マイナス (-) も数値ではない値を変換できますが、単項プラスは数値に対して何も操作しないため最速であり、なんらかの値を数値に変換するための好ましい方法です。整数や浮動小数点数の文字表現に加えて、文字列ではない値 true、false、null も変換できます。10 進数および 16 進数 (接頭辞 "0x") 表記の整数をサポートします。負の数もサポートします (ただし 16 進数表記を除く)。個々の値を解釈できない場合は、 NaN に評価されます。
構文
演算子: +x
例
+3 // 3
+'3' // 3
+true // 1
+false // 0
+null // 0
+function(val){ return val } // NaN
仕様書
| 仕様書 |
|---|
| ECMAScript (ECMA-262) |
| ECMAScript 2016 (ECMA-262) |
| ECMAScript 2017 (ECMA-262) |
| ECMAScript 2015 (6th Edition, ECMA-262) |
ブラウザーの互換性
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Addition (+) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Decrement (--) | Chrome 完全対応 2 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 4 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 3.2 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Division (/) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Exponentiation (**) | Chrome 完全対応 52 | Edge 完全対応 14 | Firefox 完全対応 52 | IE 未対応 なし | Opera 完全対応 39 | Safari 完全対応 10.1 | WebView Android 完全対応 51 | Chrome Android 完全対応 52 | Firefox Android 完全対応 52 | Opera Android 完全対応 41 | Safari iOS 完全対応 10.3 | Samsung Internet Android 完全対応 6.0 | nodejs
完全対応
7.0.0
|
Increment (++) | Chrome 完全対応 2 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 4 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 3.2 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Multiplication (*) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Remainder (%) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Subtraction (-) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Unary negation (-) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 3 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
Unary plus (+) | Chrome 完全対応 1 | Edge 完全対応 12 | Firefox 完全対応 1 | IE 完全対応 3 | Opera 完全対応 4 | Safari 完全対応 1 | WebView Android 完全対応 1 | Chrome Android 完全対応 18 | Firefox Android 完全対応 4 | Opera Android 完全対応 10.1 | Safari iOS 完全対応 1 | Samsung Internet Android 完全対応 1.0 | nodejs 完全対応 0.1.100 |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- ユーザーが明示的にこの機能を有効にしなければなりません。
- ユーザーが明示的にこの機能を有効にしなければなりません。