在javascript中执行“整数”转换/类型转换的惯用方式是啥?

Posted

技术标签:

【中文标题】在javascript中执行“整数”转换/类型转换的惯用方式是啥?【英文标题】:What is the idiomatic way of performing an "integer " conversion/typecast in javascript?在javascript中执行“整数”转换/类型转换的惯用方式是什么? 【发布时间】:2011-03-06 07:31:24 【问题描述】:

Another question 询问 javascript 中代码 sn -p a >>> 0 的含义。事实证明,这是一种确保变量为无符号 32 位整数的巧妙方法。

这很简洁,但我不喜欢它有两个原因。

表达的意图不清楚,至少对我来说不是。 它不适用于负数

这让我问:在 Javascript 中将任意值转换为“整数”的最惯用的方法是什么?它应该适用于有符号整数,而不仅仅是非负数。由于整数只是 Javascript 中伪装的浮点数而导致中断的情况是可以接受的,但应该得到承认。在任何情况下它都不应该返回undefinedNaN(这些不是整数),而是为非数字值返回0

【问题讨论】:

【参考方案1】:

parseInt 是“最惯用的”方式,因为它准确地描述了您想要它做什么。 parseInt 的缺点是,如果您输入非数字字符串,它会返回 NaN

另一种方法是按位或按 0 (| 0),它也适用于负数。此外,在非数字字符串上使用它时,它会返回 0。另一个优点是在实数上使用它比parseInt 快一点;喂它的时候速度比较慢。

12.4 | 0 输出 12 -12.4 | 0 输出 -12 "12.4" | 0 输出 12 "not a number" | 0 输出 0

【讨论】:

它并不完全符合我的要求。 parseInt("not an int, damnit") 返回NaN 他提到的|0 确实可以满足您的要求:字符串为0,true 为1,28.3 为28,-28.3 为-28,NaN(例如(+"foo")|0) 是 0,undefined 是 0。我错过了什么吗?

以上是关于在javascript中执行“整数”转换/类型转换的惯用方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript类型转换

浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度

JavaScript类型转换规则

JavaScript系列文章:自动类型转换-续

在javascript中将月份值转换为整数,以便使用getMonth()+1?

在 Go 中将字符串转换为整数类型?