JavaScript之判断是否整数、取余、取整、进制、位或、ES6


方法一

使用取余运算符判断,利用任何整数都会被1整除的原理,即余数是0的特点,通过这个规则来判断是否是整数。

javascript 复制代码
let isInteger = (val) => val % 1 === 0;

// true
isInteger(5);
// false
isInteger(5.72);

以上输出可以看出这个函数挺好用,但对于字符串某些特殊值则需要完善一下检验规则,否则会被"欺骗",对于空字符串、字符串类型数字、布尔true、空数组都返回true。在取余的时候,它们都会进行类型装换,下面例子中的空字符串,空数组都是转化成0,而true转成1。

javascript 复制代码
// true
isInteger('');
// true
isInteger('5');
// true
isInteger(true);
// true
isInteger([]);

优化

javascript 复制代码
let isInteger = (val) => typeof val === 'number' && val % 1 === 0;

// false
isInteger('');
// false
isInteger('5');
// false
isInteger(true);
// false
isInteger([]);

方式二

使用Math.roundMath.ceilMath.floor判断。整数取整后还是等于自己,利用这个特性来判断是否是整数。
Math.floor方法中会自动将参数转成数字进行向下取值,同理使用Math.ceil向上取整,Math.round四舍五入。

javascript 复制代码
let isInteger = (val) => Math.floor(val) === val;

// true
isInteger(5);
// false
isInteger(5.72);
// false
isInteger('');
// false
isInteger('5');
// false
isInteger(true);
// false
isInteger([]);

方式三

通过parseInt()判断。利用parseInt()十进制的转化特点。

javascript 复制代码
let isInteger = (val) => parseInt(val, 10) === val;

// true
isInteger(5);
// false
isInteger(5.72);
// false
isInteger('');
// false
isInteger('5.72');
// false
isInteger(true);
// false
isInteger([]);

但是对于超过检测范围的数就会不再检测,统一返回该检测数字的首个数字。

javascript 复制代码
// 1  false
parseInt(1000000000000000000000);
// 4  false
parseInt(412300213123400000000.21312);

方式四

通过位运算|判断。按位或运算符|是双目运算符, 其功能是将参与运算的两数转成32位二进制后,各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。因此利用该特性,任一数字和0位或都是返回它本身,同理非数字都是进行类型转化后再进行位或。

javascript 复制代码
let isInteger(val) => (val | 0) === val;

// true
isInteger(5);
// false
isInteger(5.72);
// false
isInteger('');
// false
isInteger('5');
// false
isInteger(true);
// false
isInteger([]);

关于位或运算,效率比Math.floor和parseInt高。
位运算的使用场景及封装


方式五

ES6提供了Number.isInteger。这是Number中的一个API方法,用来判断给定参数是否为整数。
浏览器兼容上大多数已经实现支持,目前IE并不支持。

javascript 复制代码
// true
Number.isInteger(5);
// false
Number.isInteger(5.72);
// false
Number.isInteger('');
// false
Number.isInteger('5');
// false
Number.isInteger(true);
// false
Number.isInteger([]);

结束语

以上就是判断是否为整数类型的五种方式,这五种方式各有优缺点,大家可以进行仔细比较,选择最优的进行使用。

相关推荐
fishmemory7sec7 分钟前
Electron 主进程与渲染进程、预加载preload.js
前端·javascript·electron
fishmemory7sec10 分钟前
Electron 使⽤ electron-builder 打包应用
前端·javascript·electron
OEC小胖胖36 分钟前
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
java·spring boot·后端·spring·mybatis·web
豆豆1 小时前
为什么用PageAdmin CMS建设网站?
服务器·开发语言·前端·php·软件构建
JUNAI_Strive_ving1 小时前
番茄小说逆向爬取
javascript·python
看到请催我学习2 小时前
如何实现两个标签页之间的通信
javascript·css·typescript·node.js·html5
twins35202 小时前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky2 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~2 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
哪 吒2 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od