标签: javascript
我正在努力将布尔值的类型转换为javascript中的Number。
console.log(new Number(true));//Prints 1 console.log(+true);//Prints 1 console.log(parseInt(true));//Prints NaN
为什么parseInt会抛出NaN?虽然上面给出的第一和第二个案例工作正常。
答案 0 :(得分:4)
因为parseInt需要字符串而'true'是NaN。
parseInt
'true'
NaN
来自MDN:
parseInt() parseInt()函数解析字符串参数并返回指定基数的整数(数学系统中的基数)。
parseInt()
parseInt()函数解析字符串参数并返回指定基数的整数(数学系统中的基数)。
答案 1 :(得分:2)
如果您实际上正在进行数字转换,那么此表可能非常有用:
答案 2 :(得分:2)
Number构造函数在内部调用toNumber,根据spec
Number
toNumber
布尔值 - 如果参数为true,则返回1。如果参数是,则返回+0 假的。
这意味着Number(true)会返回1.
Number(true)
但,parseInt在内部调用toString并按spec
toString
<强>布尔强> 如果参数为true,则返回&#34; true&#34;。 如果参数为false,则返回&#34; false&#34;。
<强>布尔强> 如果参数为true,则返回&#34; true&#34;。
如果参数为false,则返回&#34; false&#34;。
这意味着parseInt(true) - &gt; parseInt("true") - &gt; NaN
parseInt(true)
parseInt("true")
因为再次按spec
如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。 醇>
希望这会有所帮助。