JavaScript中的各种运算符总结
算术运算符
赋值运算符
比较运算符
逻辑运算符
三元运算符
字符串连接运算符等
算术运算符
| 运算符 | 说明 | 例子 | 运算结果 |
|---|---|---|---|
| + | 加 | y = 2+1 | y = 3 |
| - | 减 | y = 2-1 | y = 1 |
| * | 乘 | y = 2*3 | y = 6 |
| / | 除,返回结果为浮点类型 | y = 6/3 | y = 2 |
| % | 求余 | ||
| 返回结果为浮点类型 | |||
| y = 6%4 | y = 2 | ||
| ++ | 递加 | ||
| 分为前加和后加 | |||
| y = 2 | |||
| ++y(前加) | |||
| y++(后加) | y = 3 | ||
| -- | 递减 | ||
| 分为前递减和后递减 | |||
| y = 2 | |||
| --y(前减) | |||
| y--(后减) | y = 1 | ||
| ** | 幂 | ||
| 幂运算符返回第一个操作数做底数,第二个操作数做指数的乘方 | y = 2**8 | y = 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 = 6 | y = 6 | |
| += | y += 1 | y = y+1 | y = 7 |
| -= | y -= 1 | y = y-1 | y = 5 |
| *= | y *= 2 | y = y*2 | y = 12 |
| /= | y /= 2 | y = y/2 | y = 3 |
| %= | y %= 4 | y = y%4 | y = 2 |
⚠️ 赋值运算符可以嵌套使用:
y = (x = 2) + 5;
console.log("x=%d,y=%d", x, y); //输出:x=2,y=7
关系运算符
| 运算符 | 说明 | 例子 | 运算结果 |
|---|---|---|---|
| == | 等于 | 2 == 3 | FALSE |
| === | 等值等型 | ||
| 值和类型都要做比较 | 2 === 2 | ||
| 2 === "2" | TRUE | ||
| FALSE | |||
| != | 不等于 | 2 != 3 | TRUE |
| !== | 不等值或不等型 | ||
| 值和类型都要做比较 | 2 != "2" | ||
| 2 !== "2" | FALSE | ||
| TRUE | |||
| > | 大于 | 2 > 3 | FALSE |
| < | 小于 | 2 < 3 | TRUE |
| >= | 大于等于 | 2 >= 3 | FALSE |
| <= | 小于等于 | 2 <= 3 | TRUE |
**
逻辑运算符
下表列出了所有Go语言的逻辑运算符。假定 x 值为 2,y 值为 6
| 运算符 | 说明 | 例子 | 运算结果 |
|---|---|---|---|
| && | 逻辑与 (and) | ||
| 如果两边的操作数都是 True,则条件 True,否则为 False | x && y > 5 | FALSE | |
| 逻辑或 (or) | |||
| 如果两边的操作数有一个 True,则条件 True,否则为 False | x && y > 5 | TRUE | |
| ! | 逻辑非 (not) | ||
| 如果条件为 True,则逻辑 NOT 条件 False,否则为 True | !(x > y) | TRUE |
ToBoolean 操作 在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作 抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值:
| 参数类型 | 结果 |
|---|---|
| Undefined | false |
| Null | false |
| Boolean | 结果等于输入的参数(不转换) |
| Number | 如果参数为 +0, -0 或 NaN,则结果为 false;否则为 true |
| String | 如果参数为空字符串,则结果为 false;否则为 true。 |
| Object | true |
⚠️ 注意: !! 可以转成Boolean值, 方便比较,这样子做就可以全部以Boolean作为比较
位运算符
| 运算符 | 描述 | 例子 | 等同于 | 结果 | |
|---|---|---|---|---|---|
| & | 与 | 5 & 1 | 0101 & 0001 | 0001 (1) | |
| 或 | 5 | 1 | 0101 | 0001 | 0101 (5) | ||
| 异或 | 5 ^ 1 | 0101 ^ 0001 | 0100 (4) | ||
| ~ | 非 | ~5 | ~0101 | 1010 (10) | |
| << | 零填充左位移 | 5 << 1 | 0101 << 1 | 1010 (10) | |
| >> | 有符号右位移 | 5 >> 1 | 0101 >> 1 | 0010 (2) | |
| >>> | 零填充右位移 | 5 >>> 1 | 0101 >>> 1 | 0010 (2) |
| p | q | p & q | p | q | p ^ q | |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | |
| 0 | 1 | 0 | 1 | 1 | |
| 1 | 0 | 0 | 1 | 1 | |
| 1 | 1 | 1 | 1 | 0 | |
| A | B | A&B | A | B | A^B |
| 0011 1100 | 0000 1101 | 0000 1100 | 0011 1101 | 0011 0001 | |
| 对应的十进制整数 | |||||
| 60 | 13 | 12 | 61 | 49 |
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,否则为 expr3 | x = 2; | ||
| y = (x == 2) ? x : 1 | |||
| z = x != 2 ? x : 1 | |||
| console.log(y, z) | 输出:2 1 |
**⚠️提示: **为了避免错误,将三元运算符各表达式用括号括起来是个不错的主意
JavaScript 类型运算符
| 运算符 | 说明 | 例子 | 运算结果 |
|---|---|---|---|
| typeof | 返回变量的类型 | typeof 1 | number |
| instanceof | 返回 true,如果对象是对象类型的实例 | [] instanceof Array | TRUE |
字符串连接运算符
连接运算符 + 主要用于连接两个字符串或字符串变量。因此,在对字符串或字符串变量使用该运算符时,并不是对它们做加法计算
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岁