parseInt 和 Math.floor 的区别

很多同学(包括我),在 parseInt 和 Math.floor 起的作用有时混淆,确实在某种情况下(均为正数),它们是一致的!
Please look at the code :

1
2
3
4
const r1 = parseInt(1.5);
const r2 = Math.floor(1.5);
console.log("r1:::" + r1); // r1:::1
console.log("r2:::" + r2); // r2:::1

那么有没有想过,输入的值为 负数,输出的情况?
Please look at the code :

1
2
3
4
const r1 = parseInt(-1.5);
const r2 = Math.floor(-1.5);
console.log("r1:::" + r1); // r1:::-1
console.log("r2:::" + r2); // r2:::-2

诶?此时是否和你预想的结果有所不同。

那么我们来具体剖析一下:

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

完!

原创技术分享,您的支持将鼓励我继续创作