按位与(&)
按位与(&)运算符在两个操作数对应的二进位都为 1 时,该位的结果值才为 1。
例如:
最后的结果会转换成10进制进行输出
操作数会被转换为 32 位的二进制数。超过 32 位的数字将丢弃其最高有效位。
补充:(十进制怎么转化为二进制?----》除2取余,将余数进行倒叙摆列,高位补0)
例如:
按位非(~)
按位非运算符(~)将操作数的位反转。如同其他位运算符一样,它将操作数转化为 32 位的有符号整型。
与按位与一样,转换为32位,超过丢弃,不足补0。
按位或(|)
按位或(|)运算符在其中一个或两个操作数对应的二进制位为 1 时,该位的结果值为 1。
与按位与(&)和按位非(~)一样,转换为32位,超过丢弃,不足补0。
按位异或(^)
按位异或(^)运算符在两个操作数有且仅有一个对应的二进制位为 1 时,该位的结果值为 1。
与按位与(&)和按位非(~)一样,转换为32位,超过丢弃,不足补0。
逗号运算符(,)
逗号(,)运算符对它的每个操作数从左到右求值,并返回最后一个操作数的值。
一个或多个表达式,最后一个表达式的返回值会作为当前复合表达式的值。
function fun(){
let a = 0
return (a++,a) //相当于return ++a;
}
幂(**)
幂(**)运算符返回第一个操作数取第二个操作数的幂的结果。它等价于Math.pow(基数base,指数exponent),不同的是,他接受BigInt(内置对象)作为操作数
注意:
幂运算符是右结合的:a ** b ** c = a ** ( b ** c )
在大多数语言里,比如 PHP、Python 等那些有幂运算符(**)的语言,幂运算符被定义有一个比一元运算符,比如一元的 + 和一元的 - 更高的运算顺序,但有一些例外。在 Bash 语言里,** 运算符被定义有一个比一元运算符更低的运算顺序。
在 JavaScript 中,不可能写出模棱两可的幂表达式,不然会导致语法错误
例如,-2 ** 2 在 Bash 中为 4,但在其他语言(如 Python)中为 -4。这在 JavaScript 中是无效的,因为操作不明确。你必须在两边加上括号,
例如: -(2 ** 2)。
import.meta(需要深入理解)
它可以获取这个模块的URL。(我没打印出来)
in运算符
如果指定的属性在指定的对象时,返回true。
注意:in右操作数必须是一个对象值。
如果你使用 delete运算符删除了一个属性,则 in 运算符对所删除属性返回 false。
如果你只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true。
如果一个属性是从原型链上继承来的,in 运算符也会返回 true。
instanceof(需要深入理解---》和多全局对象)
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
左移 (<<)
左移操作符 (<<) 将第一个操作数向左移动指定位数,左边超出的位数将会被清除,右边将会补零
移动任意数字 x 至左边 y 位,得出 x * 2 ** y。 所以例如:5 << 2 等价于 5 * 2的2次方= 5 * 4 = 20。
右移(>>)
右移操作符 (<<) 将第一个操作数向右移动指定位数,右边超出的位数将会被丢弃,左边移出的空位补符号位(最左边的这一位(符号位)填充左边的空位)。
移动任意数字 x 至左边 y 位,得出 x * 2 ** y。 所以例如:5 << 2 等价于 5 * 2的2次方= 5 * 4 = 20。
&&=
不是转换为x = x && y,而是转换为x && ( x = y )。
||=
不是转换为x = x || y,而是转换为x || ( x = y )。
x ||= y仅在x转换成布尔类型为false时才赋值
new.target
new.target 属性允许你检测函数或构造方法是否是通过new运算符被调用的。
若是的话,new.target返回一个指向构造方法或函数的引用。
若不是,在普通的函数调用中,new.target 的值是undefined。
逻辑空赋值(??=)
逻辑空赋值运算符(x ??= y)仅在 x 是空值(null 或 undefined)时对其赋值。
转换为x ?? ( x = y )。
空值合并运算符(??)
空值合并运算符(??)是一个逻辑运算符,当左侧的操作数为 或者 undefined时,返回其右侧操作数,否则返回左侧操作数。
如果使用 || 来为某些变量设置默认值,可能会出现问题。
比如为假值(例如,' ' 或 0)时
可选链运算符(?.)
可选链运算符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。
?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (null或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。
无符号右移(>>>)
无符号右移运算符(>>>)(零填充右移)将左操作数计算为无符号数,并将该数字的二进制表示形式移位为右操作数指定的位数,取模 32。向右移动的多余位将被丢弃,零位从左移入。其符号位变为 0,因此结果始终为非负数。与其他按位运算符不同,零填充右移返回一个无符号 32 位整数。
通俗来说:无符号右移(>>>)补充的是0,右移(>>)补充的是和最左边位数相同的数字。