在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 中伪装的浮点数而导致中断的情况是可以接受的,但应该得到承认。在任何情况下它都不应该返回undefined
或NaN
(这些不是整数),而是为非数字值返回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中执行“整数”转换/类型转换的惯用方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
浏览器响应数据long型超长自动转换精度丢失-JavaScript 整数精度丢失问题-springboot解决Long类型数据传入前端损失精度