为何![]+!![]+!![]的输出结果为2?求技术解析
为什么
![]+!![]+!![]的返回结果是2? 要搞清楚这个结果,得拆解表达式里的每一步运算,结合JavaScript的类型隐式转换规则来看:
1. 逻辑非!对空数组[]的处理
在JavaScript中,空数组[]属于"真值"(除false、0、""、null、undefined、NaN之外的所有值都是真值)。逻辑非运算符!会先把操作数转为布尔值,再取反:
![]:先把[]转为布尔值true,取反后得到false(布尔类型)!![]:第一个!把[]转成false,第二个!再取反,得到true(布尔类型)
2. 加法运算符+的隐式类型转换
JavaScript的+运算符如果遇到非数值类型的操作数,会自动做类型转换:当操作数是布尔值时,会被转为对应的数值:false→0,true→1。
按从左到右的运算顺序计算整个表达式:
- 先算
![] + !![]:false + true→ 转换为0 + 1,结果是1(数值类型) - 再算
1 + !![]:1 + true→ 转换为1 + 1,最终结果是2
内容的提问来源于stack exchange,提问作者Kamlesh Soni
相关产品推荐
相关产品推荐

