首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Arithmetic Operators

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

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

语法

代码语言:javascript
复制
Operator: x + y

示例

代码语言:javascript
复制
// 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"

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

语法

代码语言:javascript
复制
Operator: x - y

示例

代码语言:javascript
复制
5 - 3 // 2
3 - 5 // -2
'foo' - 3 // NaN

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

语法

代码语言:javascript
复制
Operator: x / y

示例

代码语言:javascript
复制
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

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

语法

代码语言:javascript
复制
Operator: x * y

示例

代码语言:javascript
复制
2 * 2 // 4
-2 * 2 // -4
Infinity * 0 // NaN
Infinity * Infinity // Infinity
'foo' * 2 // NaN

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

语法

代码语言:javascript
复制
Operator: var1 % var2

示例

代码语言:javascript
复制
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)。

语法

代码语言:javascript
复制
Operator: var1 ** var2

注意

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

代码语言:javascript
复制
-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. 

示例

代码语言:javascript
复制
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

如果要反转求幂表达式结果的符号,你可以采用这样的方式:

代码语言:javascript
复制
-(2 ** 2) // -4

强制求幂表达式的基数为负数:

代码语言:javascript
复制
(-2) ** 2 // 4

注意: JavaScript也有一个按位运算符^(逻辑XOR)。**并且^是不同的(例如:2 ** 3 === 8何时)2 ^ 3 === 1

递增 (++)

递增运算符为其操作数增加1,返回一个数值。

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

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

语法

代码语言:javascript
复制
Operator: x++ or ++x

示例

代码语言:javascript
复制
// Postfix 
var x = 3;
y = x++; // y = 3, x = 4

// Prefix
var a = 2;
b = ++a; // a = 3, b = 3

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

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

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

语法

代码语言:javascript
复制
Operator: x-- or --x

示例

代码语言:javascript
复制
// Postfix 
var x = 3;
y = x--; // y = 3, x = 2

// Prefix
var a = 2;
b = --a; // a = 1, b = 1

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

语法

代码语言:javascript
复制
Operator: -x

示例

代码语言:javascript
复制
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.

语法

代码语言:javascript
复制
Operator: +x

示例

代码语言:javascript
复制
+3     // 3
+'3'   // 3
+true  // 1
+false // 0
+null  // 0
+function(val){ ?return val } // NaN

规范

Specification

Status

Comment

ECMAScript 1st Edition (ECMA-262)

Standard

Initial definition.

ECMAScript 5.1 (ECMA-262)

Standard

Defined in several sections of the specification: Additive operators, Multiplicative operators, Postfix expressions, Unary operators.

ECMAScript 2015 (6th Edition, ECMA-262)

Standard

Defined in several sections of the specification: Additive operators, Multiplicative operators, Postfix expressions, Unary operators.

ECMAScript 2016 (ECMA-262)

Standard

Added Exponentiation operator.

ECMAScript 2017 (ECMA-262)

Standard

?

ECMAScript Latest Draft (ECMA-262)

Living Standard

?

浏览器兼容性

Feature

Chrome

Edge

Firefox (Gecko)

Internet Explorer

Opera

Safari

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Exponentiation operator

52.0

?

52.0 (52.0)

?

(Yes)

?

Feature

Android

Android Webview

Edge

Firefox Mobile (Gecko)

IE Mobile

Opera Mobile

Safari Mobile

Chrome for Android

Basic support

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

(Yes)

Exponentiation operator

No support

51.0

?

52.0 (52.0)

?

?

?

52.0

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com