当前位置: 首页 > news >正文

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

MENU

  • 方法一
  • 方式二
  • 方式三
  • 方式四
  • 方式五
  • 结束语


方法一

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

let isInteger = (val) => val % 1 === 0;// true
isInteger(5);
// false
isInteger(5.72);

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

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

优化

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四舍五入。

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()十进制的转化特点。

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

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

// 1  false
parseInt(1000000000000000000000);
// 4  false
parseInt(412300213123400000000.21312);

方式四

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

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并不支持。

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

结束语

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

http://www.lryc.cn/news/283653.html

相关文章:

  • 【打造你自己的Shell:编写定制化命令行体验】
  • PGSQL主键序列
  • pg14.2迁移至KingbaseV8R6后部分表记录数为空
  • 【Spring 篇】深入解析SpringMVC的组件魅力
  • HPsocket 在 C# 中的运用:一款优秀的 socket 通信框架
  • 黑豹程序员-MyBatisPlus封装SQL的where条件的对象 QueryWrapper
  • 每日一题——LeetCode1252.奇数值单元格的数目
  • C#学习笔记3-函数与单元测试
  • osg屏幕事件处理器和状态集操控器学习
  • 中国泛娱乐出海视频字幕解决方案
  • iOS原生应用屏幕适配完整流程
  • 【征服redis8】Redis的AOF持久化
  • 【动态规划】【二分查找】【C++算法】730. 统计不同回文子序列
  • android 和 opencv 开发环境搭建
  • elasticsearch[一]-索引库操作(轻松创建)、文档增删改查、批量写入(效率倍增)
  • tp6框架中Http类 请求的header、body参数传参 及post、file格式
  • 基于极限学习机的图像处理,基于ELM的图像分割,基于极限学习机的细胞分割
  • ELAU C400/A8/1/1/1/00嵌入式系统中的模块动态加载技术
  • github clone Failed to connect to github.com port 443 after xxx ms
  • ARM的一些基础知识
  • 零售的数字化转型,利用AWS云服务资源如何操作?
  • 【通知】我的教学文章《Rust跟我学》已全部上线
  • Docker安全基线检查需要修复的一些问题
  • MobX 的 Observable Array,如何转换成一个普通的数组
  • spring boot集成loback日志配置
  • 【mars3d】 graphic.bindPopup(inthtml).openPopup()无需单击小车,即可在地图上自动激活弹窗的效果。
  • 工厂企业消防安全AI可视化视频智能监管解决方案
  • 【并发编程】synchornized原理
  • 计算机网络-ACL访问控制列表
  • 论文学习记录之SeisInvNet(Deep-Learning Inversion of Seismic Data)