贴吧看到的问题,parseInt('0o7',8)==0是为什么?

追热 2019-04-22 05:52:19
parseInt('07',8)才是等于7,而parseInt('0x7',16)也等于7。为什么标题的写法不行?
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
追热 2019-04-24
  • 打赏
  • 举报
回复
引用 9 楼 天际的海浪 的回复:
[quote=引用 6 楼 weixin_44617284 的回复:] [quote=引用 5 楼 天际的海浪 的回复:] [quote=引用 2 楼 weixin_44617284 的回复:] [quote=引用 1 楼 天际的海浪 的回复:] '0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7[/quote] 0x是16进制常数的前缀,这属于js的语法规定。如alert(0x10);输出16。 对于 parseInt()方法如果没有第二个参数指定进制数,以0x为前缀的就被认做为16进制数 另外,以0为前缀的会被认做为8进制数。如alert(010);输出8。 [/quote] 0o前缀不是标准的8进制前缀吗? +'0o10'==8是非标准的?[/quote] ES6 提供了二进制和八进制数值的最新的语法,分别用前缀 0b(0B)和 0o(0O)表示。 其实从 ES5 开始,在严格模式中,八进制就不再允许使用前缀 0 表示,ES6 进一步明确要使用前缀 0o 表示。 不过这种新的语法只有谷歌等一部分浏览器支持,并且支持的不完善。 如谷歌浏览器可以支持用 0o 表示的常数,却没有更新parseInt()方法对前缀 0b和0o的支持。 [/quote] 辛苦海浪大神了,解释的很清楚
天际的海浪 2019-04-23
  • 打赏
  • 举报
回复
引用 6 楼 weixin_44617284 的回复:
[quote=引用 5 楼 天际的海浪 的回复:] [quote=引用 2 楼 weixin_44617284 的回复:] [quote=引用 1 楼 天际的海浪 的回复:] '0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7[/quote] 0x是16进制常数的前缀,这属于js的语法规定。如alert(0x10);输出16。 对于 parseInt()方法如果没有第二个参数指定进制数,以0x为前缀的就被认做为16进制数 另外,以0为前缀的会被认做为8进制数。如alert(010);输出8。 [/quote] 0o前缀不是标准的8进制前缀吗? +'0o10'==8是非标准的?[/quote] ES6 提供了二进制和八进制数值的最新的语法,分别用前缀 0b(0B)和 0o(0O)表示。 其实从 ES5 开始,在严格模式中,八进制就不再允许使用前缀 0 表示,ES6 进一步明确要使用前缀 0o 表示。 不过这种新的语法只有谷歌等一部分浏览器支持,并且支持的不完善。 如谷歌浏览器可以支持用 0o 表示的常数,却没有更新parseInt()方法对前缀 0b和0o的支持。
追热 2019-04-23
  • 打赏
  • 举报
回复
谢谢各位的回答,才知道0开头才是标准的
追热 2019-04-23
  • 打赏
  • 举报
回复
引用 4 楼 ぃ 白龙 丶 的回复:
[quote=引用 2 楼 weixin_44617284 的回复:] [quote=引用 1 楼 天际的海浪 的回复:] '0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7[/quote] 字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分; 如果字符串以0开头,将其按照10进制解析; 如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析;[/quote] 大概了解了,0开头是八进制,应该是手快打错了吧哈哈。
追热 2019-04-23
  • 打赏
  • 举报
回复
引用 5 楼 天际的海浪 的回复:
[quote=引用 2 楼 weixin_44617284 的回复:] [quote=引用 1 楼 天际的海浪 的回复:] '0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7[/quote] 0x是16进制常数的前缀,这属于js的语法规定。如alert(0x10);输出16。 对于 parseInt()方法如果没有第二个参数指定进制数,以0x为前缀的就被认做为16进制数 另外,以0为前缀的会被认做为8进制数。如alert(010);输出8。 [/quote] 0o前缀不是标准的8进制前缀吗? +'0o10'==8是非标准的?
天际的海浪 2019-04-23
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44617284 的回复:
[quote=引用 1 楼 天际的海浪 的回复:] '0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7[/quote] 0x是16进制常数的前缀,这属于js的语法规定。如alert(0x10);输出16。 对于 parseInt()方法如果没有第二个参数指定进制数,以0x为前缀的就被认做为16进制数 另外,以0为前缀的会被认做为8进制数。如alert(010);输出8。
ぃ 白龙 丶 2019-04-23
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44617284 的回复:
[quote=引用 1 楼 天际的海浪 的回复:]
'0o7'中间的是英文字母o啊
parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效

可是parseInt('0x7',16)就可以输出正确的7[/quote]


字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分;
如果字符串以0开头,将其按照10进制解析;
如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析;
wangwan_wangwan 2019-04-23
  • 打赏
  • 举报
回复
如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数
追热 2019-04-23
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
'0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效
可是parseInt('0x7',16)就可以输出正确的7
天际的海浪 2019-04-22
  • 打赏
  • 举报
回复
'0o7'中间的是英文字母o啊 parseInt()字符串中遇到不能转换为指定进制数值的字符就会停止。只有o前面的0有效

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧