可否详细解释一下输出结果
首先, 你上面的console.log(1++"2"+"2");这个运行不会报错么?我试了是报错的.
然后, js中不会像java那样自动把非数字转换为ASCII码进行计算,所以你用字母进行减法计算的时候,计算结果是NaN
最后, js中和字符相加,就是转换为字符串拼接. 所以会出现NaN+"2"=NaN2.而NaN加上一个数字依旧是NaN,即not a number.
计算从左到右,
"+"在不同情况下,作用不一样:
1.数字 + 字符串, 字符串拼接;
2.数字 + 数字, 相加,
3.字符串 + 字符串, 字符串拼接
4.字符串 + 数字,字符串拼接
"-"作用都是"相减",非数字类型的会转化成数字类型
console.log(1+"2"+"2") // "1" + "2" + "2" ==> "122"
console.log(1+ +"2" + "2") // +"2" === 2; 1 + 2 + "2" ==> 3 + "2" ==> "3" + "2" ==> "32"
console.log("A" - "B" + "2") // "A" - "B"为NaN ==> "NaN" + "2" ==> "NaN2"
console.log("A" - "B" + "2") // "A" - "B"为NaN, NaN加任何number都还是NaN
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
(1)一个操作数+一个字符串会将操作数转化为字符串再想家
(2)第二个就如:1 + (+"2") + "2", 在+一元操作符会将操作数转换成数字
(3)"A"和"B"都无法转换成数字,Number("A") == NaN,而后面加上一个字符串,同(1),String(NaN) == "NaN"
(4)NaN同任何数字进行加减乘除等操作都是NaN,比较都是false
楼主 可以去看一下我写的一篇文章:
https://segmentfault.com/a/11...