前端知识点

关于数值:

根据国际标准IEEE754,64位浮点数格式的64个二进制位中,第0到51位存储有效数字部分(共52位),第52位到62位储存指数部分,第63位是符号位,0表示正数,1表示负数。

因此,JavaScript提供的有效数字的精度为53个二进制位(IEEE 754规定有效数字第一位默认总是为1,不保存在64位浮点数之中,这一位再加上后面的52位,就是总共53位),也就是说,绝对值小于2的53次方的整数,即-(253-1)到253-1,都可以精确表示。

Math.pow(2, 53)
// 9007199254740992

Math.pow(2, 53) + 1
// 9007199254740992

Math.pow(2, 53) + 2
// 9007199254740994

Math.pow(2, 53) + 3
// 9007199254740996

Math.pow(2, 53) + 4
// 9007199254740996

 

指数部分长度是11个二进制位,意味着指数部分最大值是2047,去掉一半给负数,则能表示的最大数为2^1024到2^-1023(开区间)

 

小数点前数字多余21位的或小数点0的个数多余5个的时候会自动转为科学技术法,此时的parseInt会有点小bug,会将转换为科学计数法视为字符串把e及之后的省略掉。

parseInt第二个参数是进制数,只能是2-36之间的数字。第一个数字必须是字符串,否则会先转换成字符串,如果此时第一个数字中有0、0x之类的就会出现问题。

parseInt(0x11, 36) // 43
// 等同于
parseInt(String(0x11), 36)
parseInt('17', 36)

x本来应该被翻译成33,但是测试被当成0x前缀所以出了问题。

 

参考:

http://javascript.ruanyifeng.com/grammar《JavaScript标准参考教程(alpha)》阮一峰

posted on 2016-05-06 09:36  reacTime  阅读(263)  评论(0)    收藏  举报