js弱类型性质转换问题

曼羊羊
  • 17

clipboard.png

clipboard.png
可否详细解释一下输出结果

回复
阅读 3.5k
3 个回答
JasonKidd
  • 3.3k
✓ 已被采纳

(1)一个操作数+一个字符串会将操作数转化为字符串再想家

(2)第二个就如:1 + (+"2") + "2", 在+一元操作符会将操作数转换成数字

(3)"A"和"B"都无法转换成数字,Number("A") == NaN,而后面加上一个字符串,同(1),String(NaN) == "NaN"

(4)NaN同任何数字进行加减乘除等操作都是NaN,比较都是false

楼主 可以去看一下我写的一篇文章:
https://segmentfault.com/a/11...

fymini
  • 4
新手上路,请多包涵

首先, 你上面的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
宣传栏