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

结束语

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

相关推荐
柒儿吖36 分钟前
Electron for 鸿蒙PC - Native模块Mock与降级策略
javascript·electron·harmonyos
颜酱1 小时前
package.json 配置指南
前端·javascript·node.js
todoitbo1 小时前
基于 DevUI MateChat 搭建前端编程学习智能助手:从痛点到解决方案
前端·学习·ai·状态模式·devui·matechat
oden1 小时前
SEO听不懂?看完这篇你明天就能优化网站了
前端
IT_陈寒1 小时前
React性能优化:这5个Hooks技巧让我减少了40%的重新渲染
前端·人工智能·后端
Sunhen_Qiletian1 小时前
《Python开发之语言基础》第六集:操作文件
前端·数据库·python
珑墨1 小时前
【唯一随机数】如何用JavaScript的Set生成唯一的随机数?
开发语言·前端·javascript·ecmascript
L***d6701 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
少云清1 小时前
【功能测试】6_Web端抓包 _Fiddler抓包工具的应用
前端·功能测试·fiddler
豐儀麟阁贵2 小时前
8.5在方法中抛出异常
java·开发语言·前端·算法