在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. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

  2. 转:Android 设置屏幕不待机

    本文转载于:http://blog.csdn.net/yudajun/article/details/7748760 Android设置支部待机有两种方法 第一种简单通过设置WindowManager ...

  3. hdu 1243 反恐训练营(dp 最大公共子序列变形)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1243 d[i][j] 代表第i 个字符与第 j 个字符的最大的得分.,, 最大公共子序列变形 #inclu ...

  4. Hibernate学习笔记之EHCache的配置

    Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1.添加相关的包: Ehcache.jar和commons-logging.jar,如果hibernate ...

  5. codeforces 340A The Wall(简单数学题)

    题意:输入a,b,x,y,a,b分别是两人的步数(每a块砖,刷一次),则有一些砖被两人同时刷到了,问[x,y]区间内有多少块砖同时被两人刷到. 分析:就是求[x,y]中有多少个能把a,b的最小公倍数l ...

  6. datatables 参数详解(转)

    //@translator codepiano //@blog codepiano //@email codepiano.li@gmail.com //尝试着翻译了一下,难免有错误的地方,欢迎发邮件告 ...

  7. 为 PHP 开发者准备的 12 个调试工具(转)

    为 PHP 开发者准备的 12 个调试工具 PHP是在实践中发展迅速并被最多使用的脚本语言:包含了诸如详细的文档.庞大的社区.无数可使用的脚本及支持框架等许多特性.PHP提供的这些特性使得它比Pyth ...

  8. 01day1

    最大音量 动态规划 题意:给出一个初始值和一个变化序列 c,在第 i 步可以加上或减去 c[i],求 n 步之后能达到的最大值.有一个限定值 maxlevel,在变化过程中值不能超过 maxlevel ...

  9. Darwin Streaming Server 6.0.3安装、订制、插件或模块

    How to setup Darwin Streaming Server 6.0.3 on 32 or 64 bit Linux platforms, add custom functionality ...

  10. (5)Quartz学习

    原文:http://blog.csdn.net/zxl315/article/details/10879927 介绍Quartz Quartz是一个开源的任务调度系统,它能用来调度很多任务的执行. 运 ...