非常教程

JavaScript参考手册

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

规范

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

JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络