在线文档教程

Arithmetic Operators

Arithmetic Operators

算术运算符以数值(字面量或变量)作为其操作数,并返回一个单个数值。标准算术运算符是加法(+),减法( - ),乘法(*)和除法(/)。

加法 (+)

加法运算符的作用是数值求和,或者字符串拼接。

语法

Operator: x + y

示例

// Number + Number -> addition 1 + 2 // 3 // Boolean + Number -> addition true + 1 // 2 // Boolean + Boolean -> addition false + false // 0 // Number + String -> concatenation 5 + 'foo' // "5foo" // String + Boolean -> concatenation 'foo' + false // "foofalse" // String + String -> concatenation 'foo' + 'bar' // "foobar"

减法 (-)

减法运算符使两个操作数相减,结果是它们的差值。

语法

Operator: x - y

示例

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

除法 (/)

除法运算符的结果是操作数的商 ,左操作数是被除数,右操作数是除数。

语法

Operator: x / y

示例

1 / 2 // returns 0.5 in JavaScript 1 / 2 // returns 0 in Java // (neither number is explicitly a floating point number) 1.0 / 2.0 // returns 0.5 in both JavaScript and Java 2.0 / 0 // returns Infinity in JavaScript 2.0 / 0.0 // returns Infinity too 2.0 / -0.0 // returns -Infinity in JavaScript

乘法 (*)

乘法运算符的结果是操作数的乘积。

语法

Operator: x * y

示例

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

求余 (%)

求余运算符返回第一个操作数对第二个操作数的模,即 var1 对 var2 取模,其中 var1 和 var2 是变量。取模功能就是 var1 除以 var2 的整型余数。 以前有个提议,在ECMAScript未来的版本中,可能会有一个获取实际模的运算符。

语法

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

幂 (**)

幂运算符返回第一个操作数做底数,第二个操作数做指数的乘方。即, var1var2 ,其中 var1 和 var2 是其两个操作数。幂运算符是右结合的。a ** b ** c 等同于 a ** (b ** c)。

语法

Operator: var1 ** var2

注意

包括 PHP 或 Python 等的大多数语言中,都包含幂运算符(一般来说符号是 ^ 或者 **)。这些语言中的幂运算符有着比其他的单目运算符(如一元 + 或一元 - )更高的优先级。但是作为例外,在 Bash 中,**  运算符被设计为比单目运算符优先级更低。在最新的 JavaScript(ES2016) 中,禁止使用带歧义的幂运算表达式。比如,底数前不能紧跟一元运算符(+/-/~/!/delete/void/typeof

-2 ** 2; // 4 in Bash, -4 in other languages. // This is invalid in JavaScript, as the operation is ambiguous. -(2 ** 2 // -4 in JavaScript and the author's intention is unambiguous.

示例

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,返回一个数值。

  • 如果后置(postfix)使用,即运算符位于操作数的后面(如 x++),那么将会在递增前返回数值。

  • 如果前置(prefix)使用,即运算符位于操作数的前面(如 ++x),那么将会在递增后返回数值。

语法

Operator: x++ or ++x

示例

// Postfix var x = 3; y = x++; // y = 3, x = 4 // Prefix var a = 2; b = ++a; // a = 3, b = 3

递减 (--)

递减运算符将其操作数减去1,并返回一个数值。

  • 如果后置使用(如 x--),则在递减前返回数值。

  • 如果前置使用(如 --x),则在递减后返回数值。

语法

Operator: x-- or --x

示例

// Postfix var x = 3; y = x--; // y = 3, x = 2 // Prefix var a = 2; b = --a; // a = 1, b = 1

一元负号 (-)

一元负号运算符位于操作数前面,并转换操作数的符号。

语法

Operator: -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。小数和十六进制格式字符串也可以转换成数值。负数形式字符串也可以转换成数值(对于十六进制不适用)。如果它不能解析一个值,则计算结果为 NaN.

语法

Operator: +x

示例

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

规范

SpecificationStatusComment
ECMAScript 1st Edition (ECMA-262)StandardInitial definition.
ECMAScript 5.1 (ECMA-262)StandardDefined in several sections of the specification: Additive operators, Multiplicative operators, Postfix expressions, Unary operators.
ECMAScript 2015 (6th Edition, ECMA-262)StandardDefined in several sections of the specification: Additive operators, Multiplicative operators, Postfix expressions, Unary operators.
ECMAScript 2016 (ECMA-262)StandardAdded Exponentiation operator.
ECMAScript 2017 (ECMA-262)Standard
ECMAScript Latest Draft (ECMA-262)Living Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
Exponentiation operator52.0?52.0 (52.0)?(Yes)?

FeatureAndroidAndroid WebviewEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)
Exponentiation operatorNo support51.0?52.0 (52.0)???52.0