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

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

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

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

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

【问题讨论】:

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

标签: asmjs javascript type-conversion


【解决方案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
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多