js中一些不常见的表达式与运算符

本文详细介绍了JavaScript中的位运算符,包括按位与(&),按位非(~),按位或(|),按位异或(^)以及左移(<<),右移(>>),无符号右移(>>>)。这些运算符涉及到二进制操作,并且在处理数值时有特定的应用场景。此外,文章还提到了运算符的优先级和一些特殊用法,如逗号运算符和新引入的逻辑赋值运算符。
摘要由CSDN通过智能技术生成

按位与(&)

按位与&)运算符在两个操作数对应的二进位都为 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,右移(>>)补充的是和最左边位数相同的数字。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值