在codewars里,确实可以学到很多很酷的方法,例如这一次的题目是判断数字是否为浮点型。我一开始是想有没有原生的js方法,像isNaN(),isFinite(),在前者Infinity是不属于NaN的,会返回false,所以有些时候并不好用。而后者则是判断是否为有效数字,包括无穷值和非数字的都会返回false。好啦,大概聊这么多也可以知道,js在某些地方还是提供了很多很好的全局函数供我们使用,但是却没有判断是否为浮点型的这一种方法。

  因为我第一次遇到这个问题,脑袋确实不灵光,于是就想到用正则的方法来筛选出整数。然后使用Reg对象的test来返回布尔值,我们大概可以看看正则表达式的整数。

  

  首先包揽正负号,然后因为存在(.23)这样的形式,所以使用 \d* 再转义\. 最后任意数字结尾即可。虽然说起来这么简单,可是一堆火星文,谁看到谁头疼啊,对不。这么糟粕的方法,怎么维护呢。但是我真的想不到什么巧妙的方法,只好提交的答案。然后看到大神的各种方法。


  第一种就是通过位运算,也就是JavaScript的与&, 或|,非~。大致说一下,这里是根据计算机的二进制32位来进行运算的,最后一位是决定正负的符号位,正为0,负为1。

  举个例子,一个数字5,是0101。一个数字6,便是0110。

  1. 若5&6,则会根据与逻辑表,得到一个新的二进制0100,所以就是数字4。
  2. 若5|6,根据或逻辑表,得到一个新的二进制0111,所以是数字7。
  3. 若~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如何判断参数为浮点型的更多相关文章

  1. JavaScript之判断参数的数值的详细类型

    //判断是否为字符串 //返回类型: //{baseType:typeof(arg),numberType:'int','float',-1} function numberType(arg){ va ...

  2. JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

  3. JavaScript中判断为整数的多种方式

    之前记录过JavaScript中判断为数字类型的多种方式,这篇看看如何判断为整数类型(Integer). JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的d ...

  4. 使用JavaScript重定向URL参数

    本人从网上查找(如有雷同,不胜荣幸.),并进行了修改,简单粗暴,实现使用JavaScript重置url参数 1.字符拼接形式 function setUri(para, val) { var strN ...

  5. Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  6. JavaScript中判断整字类型最简洁的实现方法

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

  7. javascript获取URL参数和参数值

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. javascript中判断变量时变量值为 0 的特殊情况

    有时候我们在js中会直接判断变量是否存在值,下面列举一些情况: var a = 0; var b = 1; var c = ' '; var d; console.log( a ? 1 : null) ...

  9. JavaScript学习总结(2)——JavaScript数据类型判断

    最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型  1.数值型(Number):包括整数. ...

随机推荐

  1. POJ 3185 The Water Bowls(高斯消元-枚举变元个数)

    题目链接:http://poj.org/problem?id=3185 题意:20盏灯排成一排.操作第i盏灯的时候,i-1和i+1盏灯的状态均会改变.给定初始状态,问最少操作多少盏灯使得所有灯的状态最 ...

  2. github的large file storeage

    https://git-lfs.github.com/ 1.从这个网址下载git-lfs-windows-amd64-1.1.0.exe,运行这个安装包 2.然后打开git bash 输入git lf ...

  3. 1346. Intervals of Monotonicity(dp)

    1346 简单dp #include <iostream> #include<cstdio> #include<cstring> #include<algor ...

  4. 【Todo】淘宝十年产品事-读书笔记

    书籍位置: /Users/baidu/Documents/Data/Interview/业界/淘宝十年产品事.pdf

  5. BestCoder Round #2 1001 (简单处理)

    题目链接 题意:给N条信息,每个信息代表有x个人从开始的时间 到 结束的时间在餐厅就餐, 问最少需要多少座位才能满足需要. 分析:由于时间只有24*60 所以把每个时间点放到 数组a中,并标记开始的时 ...

  6. iOS开发:插件记录

    进入沙盒的插件 https://github.com/TongeJie/ZLGotoSandboxPlugin 图片提示的插件 https://github.com/ksuther/KSImageNa ...

  7. LA 4329 (树状数组) Ping pong

    第一次写树状数组,感觉那个lowbit位运算用的相当厉害. 因为-x相当于把x的二进制位取反然后整体再加上1,所以最右边的一个1以及末尾的0,取反加一以后不变. 比如1000取反是0111加一得到10 ...

  8. lrj计算几何模板

    整理了一下大白书上的计算几何模板. #include <cstdio> #include <algorithm> #include <cmath> #include ...

  9. Python用smtplib发送邮件

    参照了下面: 1. 先随便照着试试这个: http://blog.csdn.net/zhaoweikid/article/details/1638349 2. 这个写了一个很简洁的代码,看过NO.1就 ...

  10. ZOJ1311, POJ1144 Network

    题目描述:TLC电话线路公司正在新建一个电话线路网络.他们将一些地方(这些地方用1到N的整数标明,任何2个地方的标号都不相同)用电话线路连接起来.这些线路是双向的,每条线路连接2个地方,并且每个地方的 ...