为何01232等于666?浏览器控制台运算异常咨询
为什么
01232 / 1得到666而不是1232? 这是因为非严格模式下的JavaScript会把以0开头的整数字面量解析为八进制数,而非十进制数。
八进制的01232转成十进制的计算过程很直观:
1×8³ + 2×8² + 3×8¹ + 2×8⁰ = 512 + 128 + 24 + 2 = 666
所以你在控制台执行01232 / 1时,引擎先把八进制的01232转换成十进制的666,再做除法运算,结果自然是666。
如果想快速去掉数字开头的0并得到十进制的1232,推荐两种实用方法:
- 把数字以字符串形式处理后转十进制:
Number('01232')或者+'01232' - 开启严格模式(代码开头加
'use strict';),此时以0开头的数字会直接抛出语法错误,从根源避免八进制解析的坑
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

