赋值运算符
名字 | 操作符 | 含义 |
---|---|---|
赋值 | 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]);
一元操作符
一元操作符仅对应一个操作数。
- delete
- typeof
- void 表明一个运算没有返回值
关系操作符
- in
如果所指定的属性确实存在于所指定的对象中,则会返回true - instanceof
如果所判别的对象确实是所指定的类型,则返回true。
运算符优先级
1.算数运算符 +- * / %
2.关系运算符 > < >= <= == === != !==
3.逻辑运算符 && || !
4.赋值运算符 =
逻辑运算符优先级:先非后与再或
网友评论