算術演算子

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

構文

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

単項加算 (+)

単項加算演算子はオペランドの前に置かれてオペランドを評価しますが、数値ではない値を数値に変換しようとします。単項負値 (-) も数値ではない値を変換できますが、単項加算は数値に対して何も操作しないため最速であり、なんらかの値を数値に変換するための好ましい方法です。整数や浮動小数点数の文字表現に加えて、文字列ではない値 truefalsenull も変換できます。10 進数および 16 進数 (接頭辞 "0x") 表記の整数をサポートします。負の数もサポートします (ただし 16 進数表記を除く)。個々の値を解釈できない場合は、 NaN に評価されます。

構文

演算子: +x

+3     // 3
+'3'   // 3
+true  // 1
+false // 0
+null  // 0
+function(val){ return val } // NaN

仕様書

仕様書 状態 備考
ECMAScript Latest Draft (ECMA-262) ドラフト
ECMAScript 2016 (ECMA-262) 標準 Exponentiation operator を追加
ECMAScript 2017 (ECMA-262) 標準
ECMAScript 2015 (6th Edition, ECMA-262) 標準 仕様書の複数の項で定義されています: Additive operatorsMultiplicative operatorsPostfix expressionsUnary operators
ECMAScript 5.1 (ECMA-262) 標準 仕様書の複数の項で定義されています: Additive operatorsMultiplicative operatorsPostfix expressionsUnary operators
ECMAScript 1st Edition (ECMA-262) 標準 初回定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
Addition (+)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Decrement (--)Chrome 完全対応 2Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Division (/)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Exponentiation (**)Chrome 完全対応 52Edge 完全対応 14Firefox 完全対応 52IE 未対応 なしOpera 完全対応 ありSafari 完全対応 10.1WebView Android 完全対応 51Chrome Android 完全対応 52Firefox Android 完全対応 52Opera Android 完全対応 ありSafari 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 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Multiplication (*)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Remainder (%)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Subtraction (-)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Unary negation (-)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり
Unary plus (+)Chrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 3Opera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 1.0nodejs 完全対応 あり

凡例

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

関連情報