很多同学(包括我),在 parseInt 和 Math.floor 起的作用有时混淆,确实在某种情况下(均为正数),它们是一致的!
Please look at the code :
1 | const r1 = parseInt(1.5); |
那么有没有想过,输入的值为 负数,输出的情况?
Please look at the code :
1 | const r1 = parseInt(-1.5); |
诶?此时是否和你预想的结果有所不同。
那么我们来具体剖析一下:
parseInt
语法
1 | parseInt(s:string, radix?: number): number; |
参数
- s,将要转换的值。若 s 不为字符串,则转换为字符串(隐式 ToString)。
- radix,可选,一个从 2-36 的值。如果没有提供此参数,前缀为’0x’的字符串将被视为十六进制。所有其他字符串都被认为是十进制。
可以看出 parseInt 最主要的作用是 类型转换(将输入的第一个参数字符串转换为 整数)。
Math.floor
返回小于或等于一个给定数字的最大整数。意思就是 向下取整
语法
1 | Math.floor((x: number)); |
参数
x,数字。
总结
对象 | 描述 | 输入 | 返回值 |
---|---|---|---|
parseInt | 类型转换(将输入的第一个参数字符串转换为 整数) | 字符串 | 整数 |
Math.floor | 向下取整 | 数字 | 小于或等于指定数字的最大整数 |
注意 ⚠️:
由于某些数字在其字符串表示形式中使用 e 字符(例如 6.022×23 表示 6.022e23 ),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。 parseInt 不应替代 Math.floor()。
———MDN parseInt