在 Javascript 中解析 int 的最佳方法

Posted

技术标签:

【中文标题】在 Javascript 中解析 int 的最佳方法【英文标题】:Best way to parse an int in Javascript 【发布时间】:2013-05-29 23:10:40 【问题描述】:

可以通过多种方式将字符串转换为整数,例如

parseInt("-1",10) Math.floor("-1") Number("-1") "-1"|0 ~~"-1"

我假设第一个是规范形式,但是例如asmjs 使用第三个强制整数。可能还有更多方法可以做到这一点。

使用这些有什么区别和好处?预计哪个最快?

【问题讨论】:

在 parseInt 中添加基数,以确保您在所有浏览器中都能获得所需的内容。 jsperf - string to integer @Sirko 这是一个非常有价值的链接! eval("-1") 似乎是最慢的(到目前为止),而算术 hacks 是最快的。哇。你可以很容易地把它变成一个有趣的答案 @elmes 这是最慢的。 eval 总是很慢。 @elmes:问题是,Opera 的性能不能代表其他浏览器。你应该看看 Firefox、Chrome 和 IE。 【参考方案1】:

解析十进制整数的规范方法是parseInt(str, 10)

关于其他解决方案:

parseInt("-1") :仅当您喜欢危险地生活时才使用它(某些浏览器假定 "009" 是十进制,而不是全部) Math.floor("-1") :它可能是一个楼层而不是一个整数,但如果你想确定它是一个整数,那不是正确的方法 Number("-1") : 也许你想要一个对象,这样你就可以在没有提升的情况下调用方法,并且你想确保没有垃圾 (Number('3 flowers') ==> NaN) "-1"|0~~"-1" 和其他隐式转换和二进制运算的组合:您喜欢代码高尔夫并且不希望您的代码易于维护(对于那些想知道的人:二进制运算需要数字的整数部分)。正如 Blender 在评论中指出的那样,这些解决方案不适用于大(正或负)数字。

如果您不需要确保字符串只包含 int,则不应使用 parseInt(str,10) 以外的其他解决方案。这是最快的解决方案,更重要的是,最易读。如果一个 JS 引擎做了一些优化,没有理由让其他解决方案比这个更快。

【讨论】:

另外,"n"|0~~"n" 对于所有大于 2^31 - 1 的数字都失败(我认为小于 -2^31 - 1 parseInt 和 parseFloat 的问题是,如果有任何有效数字,它们会在无效字符上停止并返回有效数字。例如,parseInt('1e9') === 1 和 parseFloat('0x10') === 0。javascript 缺少转换整个字符串或失败的“convert”(因为缺少更好的名称)函数。跨度> 【参考方案2】:

一元加号呢?看起来像是专门为类型转换而设计的。

+"-1" // -1

【讨论】:

这也将解析一个非整数数字——问题是整数。例如,+"-1.2" 将导致数字 -1.2parseInt("-1.2") 正确地导致 -1

以上是关于在 Javascript 中解析 int 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在 javascript 中从 .NET/Razor 解析本地化数字的最佳方法是啥?

Javascript解析int64

在 C 中将字符串数组转换为 Int 数组的最佳方法

如何在 Firefox 中从 JavaScript 解析 HTML?

如何从 JavaScript 中的用户输入将时间解析为 Date 对象?

Javascript Promise 无法解析 createWriteStream