原文链接 Solving a Mystery Behavior of parseInt() in JavaScript -- 创作者 Dmitri Pavlutin

parseInt() 是一个内置的 JavaScript 函数公式,它能将数据字符串数组分析为整数金额。例如,我们将要数据字符串数组 '100' 分析为整数金额:

const number = parseInt('100');
number; // 100

如期望那般,'100' 被解读为整数金额 100

parseInt(numericalString, radix) 也接纳第二个主要参数:radix(数量),另一个主要参数是数据字符串数组 numericalStringradix 主要参数允许分析来自各式各样数据数量的字符串数组为整数金额,数量一般有 2,8, 10 和 16

我们使用数量为 2parseInt() 来分析一个数字字符串数组:

const number = parseInt('100', 2);
number; // 4

parseInt('100', 2) 以数量 2 分析 '100' 为一个整数:因此它回到十进制标值 4

上边便是对 parseInt() 方式的简要介绍

1. parseInt() 中的一个古怪个人行为

parseInt(numericalString) 一直把它第一个主要参数转换成字符串(它可能并不是字符串数组得话),再将这一字符串数组数字解析成整数金额。

这也是为什么你能(但不应这样做! )应用 parseInt() 来获取浮点型的整数部分:

parseInt(0.5); // => 0
parseInt(0.05); // => 0
parseInt(0.005); // => 0
parseInt(0.0005); // => 0
parseInt(0.00005); // => 0
parseInt(0.000005); // => 0

取下浮点型,例如 0.50.05 这些整数金额的那一部分。结果可想而知 0。这和我们的预期成果一样。

那样获取 0.0000005 整数金额的那一部分会怎么样呢?

parseInt(0.0000005); // => 5

parseInt() 将浮点型 0.0000005 分析为 5。这便非常有趣并且不超出预期...

为何 parseInt(0.0000005) 会出现这般诡异的个人行为呢?

2.处理 parseInt() 该古怪个人行为

咱们回望下,parseInt(numericalString) 对它第一个主要参数干了什么:要不是字符串数组,就把其转换成一个字符串数组,随后分析,以后回到分析的整数金额。

这应该是第一个案件线索。

大家手动式将浮点型转换为字符串表达形式:

String(0.5); // => '0.5'
String(0.05); // => '0.05'
String(0.005); // => '0.005'
String(0.0005); // => '0.0005'
String(0.00005); // => '0.00005'
String(0.000005); // => '0.000005'
String(0.0000005); // => '5e-7'

String(0.0000005) 标值的显式变换和其他浮点型不一样:这是指数值标记exponential notation 字符串数组表达形式。

这个是第二个案件线索 -- 至关重要!

随后当指数值标记字符串数组分析为整数金额,你就能得到整数金额 5

parseInt(0.0000005); // => 5
// same as
parseInt(5e-7); // => 5
// same as
parseInt('5e-7'); // => 5

parseInt('5e-7') 考虑到第一个数据 '5',跳过了 'e-7'

破译了!由于 parseInt() 一直把它第一个主要参数转换为字符串,浮点数数据低于 10610^{-6} 便会被写出指数值符号方式。parseInt() 从浮点型的指数值标记中取出整数金额。

译员加 -- 留意,parseInt() 取字符串数组前边整数金额的那一部分,例如:parseInt('12Jimmy34') 亦有返回结果 12

备注名称,快速地取下浮点型整数金额的那一部分,我建议使用 Math.floor() 函数公式:

Math.floor(0.5); // => 0
Math.floor(0.05); // => 0
Math.floor(0.005); // => 0
Math.floor(0.0005); // => 0
Math.floor(0.00005); // => 0
Math.floor(0.000005); // => 0
Math.floor(0.0000005); // => 0

3. 汇总

parseInt() 是一个将数据字符串转换为整数金额的函数公式。

如果你应用 parseInt() 获得浮点型的整数部分时,要谨慎。

低于 10610^{-6} 的浮点型(例如 0.0000005 相当于 51075 * 10^{-7})被变换以指数值矩阵表示方式(例如 5e-70.0000005 指数值标记方式)。这也是为什么应用 parseInt() 应用于这般小一点浮点型会有非预期目标:仅分析指数值表明方式的重要部分(例如 5e-7 里的 5)。

考验:你能解释为什么 parseInt(999999999999999999999) 会相当于 1 还可以在下面评论区写下你的思维。

文中已经参与「 . 」

adminjs.Cn 工作生活学习必备

声明:本文仅供个人学习使用,来源于互联网,本文有改动,本文遵循[BY-NC-SA]协议, 如有侵犯您的权益,请联系本站,本站将在第一时间删除。谢谢你

原文地址:Solving a Mystery Behavior of