在JavaScript中判断整型的N种方法
原文:http://www.cnblogs.com/YcYYcY/p/3759184.html
整数类型(Integer)在JavaScript经常会导致一些奇怪的问题。在ECMAScript的规范中,他们只存在于概念中:
所有的数字都是浮点数,并且整数只是没有一组没有小数的数字。
在这篇博客中,我会解释如何去检查某个值是否为整型。
ECMAScript 5
在ES5中有很多方法你可以使用。有时侯,你可能想用自己的方法:一个isInteger(x)的函数,如果是整型返回true,否则返回false.
让我们看看一些例子。
通过余数检查
你可以使用余数运算(%),将一个数字按1求余,看看余数是不是0。
function isInteger(x) {
return x % 1 === 0;
}
我喜欢这个方法,因为它非常简单,而且有效。
> isInteger(17)
true
> isInteger(17.13)
false
在操作余数运算时你得小心一点,因为结果取决于第一个数的符号,如果是正的,结果就是正的;否则就是负的。
> 3.5 % 1
0.5
> -3.5 % 1
-0.5
然后,我们也可以检查0,这其实不是一个问题。但问题是:这个方法对非数字也会返回true,因为 % 会将它转换成数字:
> isInteger('')
true
> isInteger('33')
true
> isInteger(false)
true
> isInteger(true)
true
可以通过很简单的类型检查来解决:
function isInteger(x) {
return (typeof x === 'number') && (x % 1 === 0);
}
通过Math.round()
如果一个数字取整以后还跟之前的值一样,那么它就是整数。在JavaScript中可以通过Math.round()来检查:
function isInteger(x) {
return Math.round(x) === x;
}
这个方法也不错
> isInteger(17)
true
> isInteger(17.13)
false
它也可以判断非数字,因为Math.round()总是返回数字,并且===只有当类型一样时才返回true.
> isInteger('')
false
如果你想让代码更清晰一点,你可以添加类型检查(就是我们在之前版本做的)。另外,Math.floor()和Math.ceil()可以像Math.round()一样工作。
通过位操作检查
位操作符提供另外一种“取整”的方法:
function isInteger(x) {
return (x | 0) === x;
}
这个解决方案(跟其它位运算一样)有一个缺陷:它无法处理超过32位的数字。
> isInteger(Math.pow(2, 32))
false
通过parseInt()检查
parseInt()也提供了跟Math.round()类似将数字转换成整型的方法。
让我们看看这个方法为什么不错。
function isInteger(x) {
return parseInt(x, 10) === x;
}
像Math.round()解决方案一样,它也可以处理非数字的情况,但是它也不能正确地处理所有的整型数字:
> isInteger(1000000000000000000000)
false
为什么?parseInt()在解析整数之前强迫将第一个参数解析成字符串。因此使用这种方法将数字转换成整型不是一个好的选择。
> parseInt(1000000000000000000000, 10)
1
> String(1000000000000000000000)
'1e+21'
就像上面那样,parseInt()在解析'1e+21'时在1处停止处理了,所以它才会返回1.
ECMAScript 6
对于Math.round()扔补充,ES6提供了另外一个将数字转换成整型的方法:Math.trunc()。该函数会移除数字的小数部分。
> Math.trunc(4.1)
4
> Math.trunc(4.9)
4
> Math.trunc(-4.1)
-4
> Math.trunc(-4.9)
-4
此外,ECMAScript6不需要去处理检查整数那些琐碎的任务,因为它带有一个内置函数 Number.isInteger()。
在JavaScript中判断整型的N种方法的更多相关文章
- JavaScript中判断整字类型最简洁的实现方法
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- 007——转载——C#将字符串转换为整型的三种方法的总结
(一)转载——C#将字符串转换为整型的三种方法的总结 在C#中,要将一个字符串或浮点数转换为整数,基本上有三种方法: (1)使用强制类型转换:(int)浮点数 (2)使用Convert.ToInt32 ...
- js中判断对象类型的几种方法
我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...
- Linux中判断大小端的一种方法
大小端的定义无需赘言,常用的方法有使用联合体和指针法,如: int checkCPU() { union w { int a; char b; }c; c.a = 1; return (c.b == ...
- javascript中常用操作字符串的几种方法charAt()、indexOf()、slice()、substr()
一.charAt(index) 返回一个字符串某一个索引的字符. 语法:str.charAt(index); var str='我是中国人'; console.log(str.charAt(3));/ ...
- C#将字符串转换为整型的三种方法的总结
在C#中,要将一个字符串或浮点数转换为整数,基本上有三种方法: (1)使用强制类型转换:(int)浮点数 (2)使用Convert.ToInt32(string) (3)使用int.Parse(str ...
- JavaScript中设置元素class的三种方法小结
第一.element.setAttribute('class','abc'); 第二.element.setAttribute('className', 'abc') : 第三.element.cl ...
- JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- JavaScript中判断为整数的多种方式
之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer). JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的d ...
随机推荐
- GOOGLE 离线完整安装包下载地址
https://support.google.com/chrome/answer/126299?hl=zh-Hans 官方链接介绍 https://www.google.com/chrome/brow ...
- python Django 学习笔记(六)—— 写一个简单blog做增删改练手
简单效果图 1,创建一个项目myblog 可参考这里 myblog/ manage.py myblog/ __init__.py settings.py urls.py wsgi.py 2,创建blo ...
- 《大话设计模式》ruby版代码:策略模式
需求: 商场收银软件,根据客户购买物品的单价和数量,计算费用,会有促销活动,打八折,满三百减一百之类的. 一,使用工厂模式. # -*- encoding: utf-8 -*- #现金收费抽象类 cl ...
- Microsoft Power BI Designer
1/25/2015年1月25发布的预览版本,可以通过以下地址下载,注意有x64 和x32 版本区别(和上次PowerMap一样,一般也推荐的使用x64版本) http://www.microsoft. ...
- Microsoft SqlServer2008技术内幕:T-Sql语言基础-读书笔记1
一.理论背景:关系模型,其数学理论是集合论和谓词逻辑. 1.集合论:集合定义是把我们直观或思维中确定的,相互间有明确区别的那些对象视为一个整体,这个整体就是集合. 2.谓词逻辑:谓词是判断对象是否有某 ...
- INFORMIX数据库常用命令
INFORMIX数据库常用命令 一.onstat命令集 1.onstat - 说明:查看数据库当前的状态 用法:onstat - 2.onstat -c 说明:查看数据库的配置文件 用法:ons ...
- spring中scope(作用越)理解
今天总结了一下spring中作用域scope的用法.在spring中作用域通过配置文件形式的用法如下. <bean id="role" class="spring. ...
- Intent Android 详解
Intents and Intent Filters 三种应用程序基本组件 activity, service和broadcast receiver——是使用称为intent的消息来激活的. Inte ...
- 设计移动App的十大技巧
编写一款Android或iOS应用也许很容易,但是若想设计的成功却不是一件简单的事,用户界面对于一款移动应用的成功是至关重要的.也许你会说,为何界面那么糙的Flappy Bird可以大红大紫,可那毕竟 ...
- Android实现传感器应用及位置服务
Android实现传感器应用及位置服务 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 这里需用获取加速度传感器和地磁传感器,手机获取旋转的方 ...