为何~-(2 + "2")的运算结果为21?运算符运算逻辑咨询
解析表达式
~-(2 + "2") 得到21的原理 嘿,这个问题挺有意思的!咱们一步步拆解这个表达式,你就能明白它为啥会得到21了——这本质是JavaScript里运算符优先级和隐式类型转换共同作用的结果,分三步来看:
第一步:计算最内层的 2 + "2"
JavaScript里的+运算符有两种作用:数字加法和字符串拼接。当操作数里有一个是字符串时,它会触发字符串拼接逻辑:把另一个操作数(这里的数字2)转换成字符串"2",然后和原字符串"2"拼接,结果就是 "22"。
第二步:计算 -("22")
接下来是一元负号运算符-,它的作用是将操作数转换成数值后取负。这里的操作数是字符串"22",JS会自动把它转换成数字22,再加上负号,结果就是 -22。
第三步:计算 ~(-22)
最后是按位非运算符~,这个运算符的规则可以用一个简单的公式概括:~x = -(x + 1)。咱们代入x=-22算一下:
~(-22) = -(-22 + 1) = -( -21 ) = 21
如果想从二进制补码的角度理解:在JS里数字是32位有符号整数,-22的补码取反后,对应的十进制数值就是21,和公式计算的结果一致。
总结运算顺序
整个表达式的执行优先级是:
- 括号最高,先算
2 + "2"得到"22" - 然后是一元负号
-,将"22"转为-22 - 最后是按位非
~,得到最终结果21
内容的提问来源于stack exchange,提问作者dev-cc
相关产品推荐
相关产品推荐

