在chrome里运行parseInt(070)
得到56,一开始有点懵后来想明白了:070表示8进制数,转换为10进制当然是56.
于是我又在chrome里运行parseInt(070, 8)
,以为得到结果必然是070
结果大出意料,是46
不能理解啊,怎么回事
在chrome里运行parseInt(070)
得到56,一开始有点懵后来想明白了:070表示8进制数,转换为10进制当然是56.
于是我又在chrome里运行parseInt(070, 8)
,以为得到结果必然是070
结果大出意料,是46
不能理解啊,怎么回事
parseInt
第一个参数是字符串,如果不是就转为字符串再进行转换。只要开头为 0 就会进行隐式 8 进制转换,toString
后就变成 '56'
parseInt(070, 8) -> parseInt(Number(070).toString(), 8) -> parseInt('56', 8)
070
是个数,不是字符串,对解释器来说和写下56
是一样的。这样做只是为了更适合人读代码,比如,有时候写0xF
比15
更易读懂。
paseInt
第一个参数是字符串。
第一个 070
即 56
--toString--> "56"
--parseInt10--> 56
第二个 070
即 56
--toString--> "56"
--parseInt8--> 46
8 回答4.6k 阅读✓ 已解决
6 回答3.2k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
parseInt(070, 8)
不等于parseInt(70, 8)
而是等于parseInt(parseInt(70, 8), 8)