扫码关注官方订阅号
在chrome里运行parseInt(070)得到56,一开始有点懵后来想明白了:070表示8进制数,转换为10进制当然是56.
parseInt(070)
于是我又在chrome里运行parseInt(070, 8),以为得到结果必然是070
parseInt(070, 8)
结果大出意料,是46
不能理解啊,怎么回事
走同样的路,发现不同的人生
parseInt(070, 8)不等于parseInt(70, 8)而是等于parseInt(parseInt(70, 8), 8)
parseInt(70, 8)
parseInt(parseInt(70, 8), 8)
070是个数,不是字符串,对解释器来说和写下56是一样的。这样做只是为了更适合人读代码,比如,有时候写0xF比15更易读懂。
070
56
0xF
15
paseInt 第一个参数是字符串。第一个 070 即 56 --toString--> "56" --parseInt10--> 56 第二个 070 即 56 --toString--> "56" --parseInt8--> 46
paseInt
"56"
46
parseInt 第一个参数是字符串,如果不是就转为字符串再进行转换。只要开头为 0 就会进行隐式 8 进制转换,toString 后就变成 '56'
parseInt
toString
'56'
parseInt(070, 8) -> parseInt(Number(070).toString(), 8) -> parseInt('56', 8)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
parseInt(070, 8)不等于parseInt(70, 8)而是等于parseInt(parseInt(70, 8), 8)070是个数,不是字符串,对解释器来说和写下56是一样的。这样做只是为了更适合人读代码,比如,有时候写0xF比15更易读懂。paseInt第一个参数是字符串。第一个
070即56--toString-->"56"--parseInt10-->56第二个
070即56--toString-->"56"--parseInt8-->46parseInt第一个参数是字符串,如果不是就转为字符串再进行转换。只要开头为 0 就会进行隐式 8 进制转换,toString后就变成'56'