Javascript中的数字类型转换:parseInt和ToNumber

前言

一个数字和一个布尔型用==比较时,类型会如何转换?

字符串和布尔进行比较,类型如何转换?

问题

我记得之前的记忆中,一个字符串转换成数字,是从第一位开始检查的,将可以转换成数字的位置转完,舍弃之后无法转换的。例如:

123abc -> 123

abc123 -> NaN

于是我很自信的认为,console.log('1true' == true);的结果是true,但我运行代码后,发现竟然是false。于是我整个人就懵逼了,难道1true的结果不是1

解决

查看文档后,发现所有数字的隐式类型转换都是用的ToNumber,而我之前记得从第一位开始转的是parseInt

当使用Number创建一个数字时,会对参数进行ToNumber转换,于是我使用console.log(Number('1true'));查看输出,结果是NaN,而parseInt1,而console.log(parseInt('1true') == true);结果也是true

查看parseInt文档后,描述是:如果第一个字符不能被转换成数字,parseInt返回NaN

而Number文档是:如果参数无法被转换为数字,则返回 NaN

隐式类型转换