JS运算符总结

2019-12-08  本文已影响0人  仙姑本姑

赋值运算符

名字 操作符 含义
赋值 x=y x=y
加法赋值 x+=y x=x+y
减法赋值 x-=y x=x-y
乘法赋值 x*=y x=x*y
除法赋值 x/=y x=x/y
求余赋值 x%=y x=x%y
左移位赋值 x<<=y x=x<<y
右移位赋值 x>>=y x=x>>y
无符号右移位赋值 x>>>=y x=x>>>y
按位与赋值 x&=y x=x&y
按位异或赋值 x^=y x=x^y
按位或赋值 x(或)=y x=x(或)y

左移位举例

var bar = 5; //  (00000000000000000000000000000101)
bar <<= 2; // 20 (00000000000000000000000000010100)

无符号右移与有符号右移

1.有符号右移>>(若正数,高位补0,负数,高位补1)

正数:例如4>>2
首先写出4的二进制数,因为是正数所以最高位为0,也就是第一个
0000 0000 0000 0000 0000 0000 0000 0100
右移两位得到(高位补0)
000000 0000 0000 0000 0000 0000 0000 01
结果为:1,右移n位也就是4/(2^n)
负数:例如-4>>2(高位补1)
首先写出-4的二进制数,因为是负数所以最高位为1
1000 0000 0000 0000 0000 0000 0000 0100
然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)
1111 1111 1111 1111 1111 1111 1111 1100(补码)
右移2位: 在高位补1
1111 1111 1111 1111 1111 1111 1111 1111
根据补码写出原码才是我们所求的结果, 保留符号位,然后按位取反再加上1
100000 0000 0000 0000 0000 0000 0000 00(取反后的结果)
100000 0000 0000 0000 0000 0000 0000 01(再加1)
结果为:-1

2:无符号右移>>>(不论正负,高位均补0)

正数:例如4>>>2
与4>>2的运算相同,结果也为1
负数:例如-4>>>2
首先写出-4的二进制数,因为是负数所以最高位为1
1000 0000 0000 0000 0000 0000 0000 0100
然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)
1111 1111 1111 1111 1111 1111 1111 1100(补码)
右移2位: 在高位补0
0011 1111 1111 1111 1111 1111 1111 1111
结果为:1073741823

按位异或举例

异或--同为0,异为1

var bar = 5;
bar ^= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111

比较运算符

运算符 描述
等于 (==) 如果两边操作数相等时返回true。
不等于(!=) 如果两边操作数不相等时返回true
全等 (===) 两边操作数相等且类型相同时返回true。
不全等 (!==) 两边操作数不相等或类型不同时返回true。
大于 (>) 左边的操作数大于右边的操作数返回true
大于等于 (>=) 左边的操作数大于或等于右边的操作数返回true
小于 (<) 左边的操作数小于右边的操作数返回true
小于等于 (<=) 左边的操作数小于或等于右边的操作数返回true

算术运算符

运算符 描述 举例
求余(%) 二元运算符. 返回相除之后的余数 12 % 5 返回 2。
自增(++) 一元运算符. 将操作数的值加一. 如果放在操作数前面 (++x), 则返回加一后的值; 如果放在操作数后面 (x++), 则返回操作数原值,然后再将操作数加一 var x=3;
console.log(++x); //4
var y=3;
console.log(y++); //3
自减(--) 一元运算符. 将操作数的值减一. 前后缀两种用法的返回值类似自增运算符 var x=3;
console.log(--x); //输入2,x=2
var y=3;
console.log(y--);//输出3,x=2;
一元负值符(-) 一元运算符,返回操作数的负值. var x=3; console.log(-x); //输入-3
一元正值符(+) 一元运算符, 如果操作数在之前不是number,试图将其转换为number console.log( +'3' ); // 3
console.log( '3' ); // '3'
console.log(+true); // 1
指数运算符(**) 计算 base(底数) 的 exponent(指数)次方, 表示为base^exponent 2 ** 3 returns 8.10 ** -1 returns 0.1.

位运算符

位运算符将它的操作数视为32位元的二进制串(0和1组成)而非十进制八进制或十六进制数。例如:十进制数字9用二进制表示为1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的JavaScript数值。

Operator Usage Description
按位与 a & b 在a,b的位表示中,每一个对应的位都为1则返回1, 否则返回0
按位或 a (或)b 在a,b的位表示中,每一个对应的位,只要有一个为1则返回1, 否则返回0.
按位异或 a ^ b 在a,b的位表示中,每一个对应的位,两个不相同则返回1,相同则返回0.
按位非 ~ a 反转被操作数的位。
左移 a << b 将a的二进制串向左移动b位,右边移入0.
算术右移 a >> b 把a的二进制表示向右移动b位,丢弃被移出的所有位.(译注:算术右移左边空出的位是根据最高位是0和1来进行填充的)
无符号右移(左边空出位用0填充) a >>> b 把a的二进制表示向右移动b位,丢弃被移出的所有位,并把左边空出的位都填充为0

位运算符范例

表达式 结果 二进制描述
15 & 9 9 1111 & 1001 = 1001
15 (或)9 15 1111 (或) 1001 = 1111
15 ^ 9 6 1111 ^ 1001 = 0110
~15 -16 ~00000000...00001111 = 11111111...11110000
~9 -10 ~00000000...00001001 = 11111111...11110110

注意位运算符“非”将所有的32位取反,而值的最高位(最左边的一位)为1则表示负数

逻辑运算符

运算符 范例 描述
逻辑与(&&) expr1 && expr2 (逻辑与) 如果expr1能被转换为false,那么返回expr1;否则,返回expr2。因此,&&用于布尔值时,当操作数都为true时返回true;否则返回false.
逻辑或 expr1 (逻辑或)expr2 (逻辑或) 如果expr1能被转换为true,那么返回expr1;否则,返回expr2。因此,用于布尔值时,当任何一个操作数为true则返回true;如果操作数都是false则返回false。
逻辑非(!) !expr (逻辑非) 如果操作数能够转换为true则返回false;否则返回true。

字符串运算符

它可以在字符串值中使用,连接操作符(+)连接两个字符串值相连接,返回另一个字符串,它是两个操作数串的结合。
例如,

console.log("my " + "string"); // console logs the string "my string".
简写操作符 += 也可以用来拼接字符串

例如:

var myString = "alpha";
myString += "bet"; // 返回 "alphabet"  

条件(三元)运算符

条件运算符是JavaScript中唯一需要三个操作数的运算符。运算的结果根据给定条件在两个值中取其一。语法为:

条件 ? 值1 : 值2

如果条件为真,则结果取值1。否则为值2
例如,

var status = (age >= 18) ? "adult" : "minor";

age 大于等于18的时候,将“adult”赋值给status;否则将“minor”赋值给 status

逗号操作符

逗号操作符(,)对两个操作数进行求值并返回最终操作数的值。它常常用在 for 循环中,在每次循环时对多个变量进行更新。

for (var i = 0, j = 9; i <= j; i++, j--)
  console.log('a[' + i + '][' + j + ']= ' + a[i][j]);

一元操作符

一元操作符仅对应一个操作数。

关系操作符

运算符优先级

1.算数运算符 +- * / %
2.关系运算符 > < >= <= == === != !==
3.逻辑运算符 && || !
4.赋值运算符 =
逻辑运算符优先级:先非后与再或

上一篇 下一篇

猜你喜欢

热点阅读