算術演算子

算術演算子は数値 (または文字列や変数) をオペランドとして扱い、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
-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 ** ca ** (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) で使った場合、減算した後の値を返します。

構文

演算子: 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

単項プラス (+)

単項プラス演算子はオペランドの前に置かれてオペランドを評価しますが、数値ではない値を数値に変換しようとします。単項マイナス (-) も数値ではない値を変換できますが、単項プラスは数値に対して何も操作しないため最速であり、なんらかの値を数値に変換するための好ましい方法です。整数や浮動小数点数の文字表現に加えて、文字列ではない値 truefalsenull も変換できます。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)

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Addition (+)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Decrement (--)Chrome 完全対応 2Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 4WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 3.2Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Division (/)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Exponentiation (**)Chrome 完全対応 52Edge 完全対応 14Firefox 完全対応 52IE 未対応 なしOpera 完全対応 39Safari 完全対応 10.1WebView Android 完全対応 51Chrome Android 完全対応 52Firefox Android 完全対応 52Opera Android 完全対応 41Safari iOS 完全対応 10.3Samsung Internet Android 完全対応 6.0nodejs 完全対応 7.0.0
完全対応 7.0.0
完全対応 6.5.0
無効
無効 From version 6.5.0: this feature is behind the --harmony runtime flag.
Increment (++)Chrome 完全対応 2Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 4WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 3.2Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Multiplication (*)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Remainder (%)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Subtraction (-)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Unary negation (-)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 3Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100
Unary plus (+)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応
未対応  
未対応
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報