MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

算術演算子 は 数値 (または文字列や変数)をオペランドとして扱い、1つの数値(または文字列や変数)を返します。標準的な算術演算子には足し算(+),引き算(-),掛け算(*),割り算(/)があります。

加算 (+)

加算演算子は数値の合計または文字列の連結を行います。

構文

Operator: 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つの数値を差し引き、差を返します。

構文

Operator: x - y

5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN

除算 (/)

除算演算子は左のオペランドを右のオペランドで割り引くことで商を返します。

構文

Operator: 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 を返す

乗算 (*)

乗算演算子は数値を掛けあわせた結果を返します。

構文

Operator: x * y

2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
'foo' * 2 // NaN

剰余 (%)

剰余演算子は 1 つ目の数値を 2 つ目の数値で割った余りを返します。剰余の符号は常に、序数ではなく被除数の符号を採用します。これは結果を生み出すために組み込みの modulo 機能を使用しており、その結果は (例えば var1 modulo var2 では) var1var2 で割ったときの整数の剰余です。将来のバージョンの ECMAScript では、modulo 演算子の導入が検討されています。剰余演算子との違いは、被除数ではなく除数の符号を採用することです。

構文

Operator: var1 % var2

12 % 5 // 2
-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) は同じ値を返します。

構文

Operator: 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)前置記法で使った場合、加算した後の値を返します。

構文

Operator: 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

単項負値 (-)

単項負値演算子は、オペランドの前に置き、値を負にする。

構文

Operator: -x

var x = 3;
y = -x; // y = -3, x = 3

単項加算 (+)

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

構文

Operator: +x

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

仕様

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

ブラウザ互換性

機能 Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有) (有)
べき乗演算子 52.0 ? 52.0 (52.0) ? (有) ?
機能 Android Android Webview Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Android 版 Chrome
基本サポート (有) (有) (有) (有) (有) (有) (有) (有)
べき乗演算子 未サポート 51.0 ? 52.0 (52.0) ? ? ? 52.0

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: yyss, ambi, mamodayo, lv7777, teoli, ethertank, Potappo
 最終更新者: yyss,