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([]);

结束语

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

相关推荐
禅思院2 分钟前
下篇:打造可观测的异步加载防御体系
前端·架构·前端框架
|晴 天|5 分钟前
Vue 3 项目错误处理实战:Vue ErrorHandler、Promise 监控、用户友好提示
前端·javascript·vue.js
Cobyte6 分钟前
8.响应式系统比对:手写 SolidJS 响应式系统
前端·javascript·vue.js
IT_陈寒7 分钟前
Python中的这个可变默认参数陷阱我居然又踩了
前端·人工智能·后端
qiao若huan喜14 分钟前
13、webgl基本概念 + 绘制狮子座星空
前端·javascript·信息可视化·webgl
之歆19 分钟前
Day03_HTML 列表、表格、表单完整指南(上)
前端·html
吴声子夜歌21 分钟前
Vue3——组件基础
前端·javascript·vue.js
恋猫de小郭22 分钟前
Jetpack Compose 1.11 正式版发布,下一代的全新控件和样式 API,你必须知道
android·前端·flutter
孩子 你要相信光23 分钟前
前端 Canvas 导出带水印图片跨域问题
前端
zxna28 分钟前
前端直连oss分片上传文件,断点续传
前端