JavaScript如何判断参数为浮点型
在codewars里,确实可以学到很多很酷的方法,例如这一次的题目是判断数字是否为浮点型。我一开始是想有没有原生的js方法,像isNaN(),isFinite(),在前者Infinity是不属于NaN的,会返回false,所以有些时候并不好用。而后者则是判断是否为有效数字,包括无穷值和非数字的都会返回false。好啦,大概聊这么多也可以知道,js在某些地方还是提供了很多很好的全局函数供我们使用,但是却没有判断是否为浮点型的这一种方法。
因为我第一次遇到这个问题,脑袋确实不灵光,于是就想到用正则的方法来筛选出整数。然后使用Reg对象的test来返回布尔值,我们大概可以看看正则表达式的整数。
首先包揽正负号,然后因为存在(.23)这样的形式,所以使用 \d* 再转义\. 最后任意数字结尾即可。虽然说起来这么简单,可是一堆火星文,谁看到谁头疼啊,对不。这么糟粕的方法,怎么维护呢。但是我真的想不到什么巧妙的方法,只好提交的答案。然后看到大神的各种方法。
第一种就是通过位运算,也就是JavaScript的与&, 或|,非~。大致说一下,这里是根据计算机的二进制32位来进行运算的,最后一位是决定正负的符号位,正为0,负为1。
举个例子,一个数字5,是0101。一个数字6,便是0110。
- 若5&6,则会根据与逻辑表,得到一个新的二进制0100,所以就是数字4。
- 若5|6,根据或逻辑表,得到一个新的二进制0111,所以是数字7。
- 若~5,则会返回 -num-1,所以~5就是-6。
没有试过的同学,有兴趣的大家可以自己尝试一下。好,不跑题了那我说这个为了什么呢?试想一下如果我们对一个整型数字 ~~int,最后应该还是int对吧。但是如果是浮点型呢?~float,则数字会忽略小数位。所以我们~1.23 => -2,然后~-2 => 1,那这样就可以快速分清楚哪些是浮点型,哪些是整型了。根据这个特性,我们试验一下。
这个看起来就简洁多啦,而且因为进行的是底层的位运算,效率也十分的高。
根据对数字对1求模的特性来判断,这个方法也是非常的妙!这个是什么意思呢?
正常来说,int % 1 === 0,但若是float % 1,却不再是0了,对吧!所以根据特性我们可以用下面的这种方法。
根据隐性转换,巧妙变化。这个巧妙之处,不必多说,直接看代码吧。
这是利用了JavaScript灵活的隐性转化,若为整数,则"23.0" == 23是可以的,而浮点型则会真正成为带有两个.的字符串。非常巧妙吧!
看完这几种方法,再回头看看我的正则表达式,不忍直视啊!这不能算是奇淫巧计吧,多积累一下这些或许再某些地方可以帮到大家!
写完之后才发现了一个好方法,当时竟然想不到。n != parseInt(n);
JavaScript如何判断参数为浮点型的更多相关文章
- JavaScript之判断参数的数值的详细类型
//判断是否为字符串 //返回类型: //{baseType:typeof(arg),numberType:'int','float',-1} function numberType(arg){ va ...
- JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- JavaScript中判断为整数的多种方式
之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer). JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的d ...
- 使用JavaScript重定向URL参数
本人从网上查找(如有雷同,不胜荣幸.),并进行了修改,简单粗暴,实现使用JavaScript重置url参数 1.字符拼接形式 function setUri(para, val) { var strN ...
- Java与JavaScript中判断两字符串是否相等的区别
JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...
- JavaScript中判断整字类型最简洁的实现方法
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
- javascript获取URL参数和参数值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript中判断变量时变量值为 0 的特殊情况
有时候我们在js中会直接判断变量是否存在值,下面列举一些情况: var a = 0; var b = 1; var c = ' '; var d; console.log( a ? 1 : null) ...
- JavaScript学习总结(2)——JavaScript数据类型判断
最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数. ...
随机推荐
- java web 下实现文件下载
来自:http://blog.csdn.net/longshengguoji/article/details/39433307 需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法 ...
- (四)CSS选择器和派生选择器
CSS派生选择器允许你根据文档的上下文关系来确定某个标签的样式.在学习派生之前,先来了解基本的CSS选择器.前面的文章中提到过下图,选择器的位置如下所示: CSS选择器 分为几种基本选择器:元素选择器 ...
- DNSget Ip
var address = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(a => a.AddressFamily ...
- libmysqlclient.so.15: cannot open shared object file: No such file or directory
错误: ./mafsInRegion: error while loading shared libraries: libmysqlclient.so.15: cannot open shared o ...
- git push 提示
我运行git push -u origin master 时提示如下: To git@github.com:userName/project.git ! [rejected] master -> ...
- tc 2014 college tour 250 500
题意: You are given a long long n. Return the largest divisor of n that is a perfect square. That is, ...
- GET,POST,PUT,DELETE的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- BZOJ2337: [HNOI2011]XOR和路径
题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...
- java分层架构概念
转自:http://www.cnblogs.com/bdqnbenet/p/4924778.html service是业务层 DAO (Data Access Object) 数据访问 1.JAVA中 ...
- Android 长按setOnItemLongClickListener 注意细节
Java代码 gridview.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean ...