JavaScript 运算符

182 阅读6分钟

JavaScript中的各种运算符总结
算术运算符
赋值运算符
比较运算符
逻辑运算符
三元运算符
字符串连接运算符等

算术运算符

运算符说明例子运算结果
+y = 2+1y = 3
-y = 2-1y = 1
*y = 2*3y = 6
/除,返回结果为浮点类型y = 6/3y = 2
%求余
返回结果为浮点类型
y = 6%4y = 2
++递加
分为前加和后加
y = 2
++y(前加)
y++(后加)y = 3
--递减
分为前递减和后递减
y = 2
--y(前减)
y--(后减)y = 1
**
幂运算符返回第一个操作数做底数,第二个操作数做指数的乘方y = 2**8y = 256

对于前加和后加,执行后的结果都是变量加1,其区别在于执行时返回结果不一样,参考下面两个例子:

var x = 0, y = 0;
console.log(++x,x)  //输出:1 1
console.log(y++, y) //输出:0 1

a = 0, b = 0;
console.log(--a,a)  //输出:-1 -1
console.log(b--, b) //输出:0 -1

JavaScript中的特殊运算 ⚠️注意:在JS中,如果运算数不是运算符所要求的类型,那么js引擎会自动的将运算数进行类型转换

a = -"10"  // -10
c = +true  // 1
d = -false // -0
console.log(a, b, c, d)

// NAN的产生
b = -"Ken" // NaN
100 - '2a';        // NaN
'100'/ '20a';      // NaN
'20a'* 5 ;         // NaN
parseInt('abc')    // NaN
Number('123abc');  // NaN
parseFloat('abc')  // NaN
Number('abc')      // NaN
1/0 * 0            // NaN
(1/0)/(1/0)        // NaN
undefined - 1;     // NaN, Number(undefined) == NaN
[] * 20 ;          // 0, Number([]) == 0
null- 5;           // -5, Number(null) == 0

// 如果结果太大或太小,那么生成的结果是 Infinity 或 -Infinity
// 如果某个运算数是 NaN,结果为 NaN
// Infinity 乘以 0,结果为 NaN
// Infinity 乘以 0 以外的任何数字,结果为 Infinity 或 -Infinity
// Infinity 乘以 Infinity,结果为 Infinity
e = 1/0                      //Infinity
f = 10000**100000**100000    //Infinity
g = -1*10000**100000**100000 //-Infinity
h = 1/0 * 0                  // NaN
console.log(e, f, g, h)

赋值运算符

赋值运算符=用于赋值运算,赋值运算符的作用在于把右边的值赋值给左边变量。设定 y = 6,参见下表:

运算符例子等价于运算结果
=y = 6y = 6
+=y += 1y = y+1y = 7
-=y -= 1y = y-1y = 5
*=y *= 2y = y*2y = 12
/=y /= 2y = y/2y = 3
%=y %= 4y = y%4y = 2

⚠️ 赋值运算符可以嵌套使用:

y = (x = 2) + 5;
console.log("x=%d,y=%d", x, y); //输出:x=2,y=7

关系运算符

运算符说明例子运算结果
==等于2 == 3FALSE
===等值等型
值和类型都要做比较2 === 2
2 === "2"TRUE
FALSE
!=不等于2 != 3TRUE
!==不等值或不等型
值和类型都要做比较2 != "2"
2 !== "2"FALSE
TRUE
>大于2 > 3FALSE
<小于2 < 3TRUE
>=大于等于2 >= 3FALSE
<=小于等于2 <= 3TRUE

**

逻辑运算符

下表列出了所有Go语言的逻辑运算符。假定 x 值为 2,y 值为 6

运算符说明例子运算结果
&&逻辑与 (and)
如果两边的操作数都是 True,则条件 True,否则为 Falsex && y > 5FALSE
逻辑或 (or)
如果两边的操作数有一个 True,则条件 True,否则为 Falsex && y > 5TRUE
!逻辑非 (not)
如果条件为 True,则逻辑 NOT 条件 False,否则为 True!(x > y)TRUE

ToBoolean 操作 在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作 抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值:

参数类型结果
Undefinedfalse
Nullfalse
Boolean结果等于输入的参数(不转换)
Number如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true
String如果参数为空字符串,则结果为 false;否则为 true。
Objecttrue

⚠️ 注意: !! 可以转成Boolean值, 方便比较,这样子做就可以全部以Boolean作为比较

位运算符

运算符描述例子等同于结果
&5 & 10101 & 00010001 (1) 
5 | 10101 | 00010101 (5) 
异或5 ^ 10101 ^ 00010100 (4)
~~5~01011010 (10)
<<零填充左位移5 << 10101 << 11010 (10)
>>有符号右位移5 >> 10101 >> 10010 (2)
>>>零填充右位移5 >>> 10101 >>> 10010 (2)
pqp & qp | qp ^ q
00000
01011
10011
11110
ABA&BABA^B 
0011 11000000 11010000 1100 0011 11010011 0001 
对应的十进制整数
6013126149

JavaScript 使用 32 位按位运算数 JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行 在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数 执行按位操作后,结果将转换回 64 位 JavaScript 数 上面的例子使用 4 位无符号二进制数。所以 ~ 5 返回 10, 由于 JavaScript 使用 32 位有符号整数,JavaScript 将返回 -6

00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)

有符号整数使用最左边的位作为减号

条件运算符

运算符说明例子运算结果
? :三元表达式 
可以视作是特殊的关系比较运算符
(expr1) ? (expr2) : (expr3)
语法:在 expr1为TRUE时, 整个表达式的值为 expr2,否则为 expr3x = 2;
y = (x == 2) ? x : 1
z = x != 2 ? x : 1
console.log(y, z)  输出:2 1

**⚠️提示: **为了避免错误,将三元运算符各表达式用括号括起来是个不错的主意

JavaScript 类型运算符

运算符说明例子运算结果
typeof返回变量的类型typeof 1number
instanceof返回 true,如果对象是对象类型的实例[] instanceof ArrayTRUE

字符串连接运算符

连接运算符 + 主要用于连接两个字符串或字符串变量。因此,在对字符串或字符串变量使用该运算符时,并不是对它们做加法计算

x = "beijing";
y = x + "你好!";  //结果:y = "beijing你好!"
y = x + " 你好!"; //结果:y = "beijing 你好!" 要想在两个字符串之间增加空格,需要把空格插入一个字符串之中

当对字符串和数字做连接(加法)运算时,会将数字先转换成字符串再连接(相加)

x = 25
y = "y今年" + x + "岁"
z = `z今年${x}岁`  //字符串模板
console.log(y, z) //输出: y今年25岁 z今年25岁