`

在javascript中检查一个值是否为integer

阅读更多

integer 类型在javascript中很奇怪。ECMAScript技术规格说明书中,它是以概念的形式存在。number类型包括浮点型(floating )和整形(integer )不包括小数(详情参考 “Integers in JavaScript” in “Speaking JavaScript”)。在这篇博客中Dr. Axel Rauschmayer  大师将解释如何检查一个值是否为integer。 

ECMAScript 5

有很多方式可以检查一个值是否为integer. 在此, 你可以休息一下并且试着写一下你自己的解决方案。例如: 定义一个 function isInteger(x),如果它是(integer )让它返回 true  或者返回 false。

让我们看一下大师的小例子.

使用整除进行检查(Checking via the remainder operator)

首先我们可以使用 remainder operator (%) 去运算 number类型是不是一个 integer。number 类型整除 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

 

我们也可以检查传入的值是不是 zero(0),这里 zero(0)不是讨论的重点. 但是会有一个问题出现: 这个function 会当传入的值为non-number时 return true   因为 整除符号(%)会强制将传入的值转换为 numbers:

    > isInteger('')
    true
    > isInteger('33')
    true
    > isInteger(false)
    true
    > isInteger(true)
    true

 

所以这里我们在加上一个类型的判断(typeof):

   function isInteger(x) {
        return (typeof x === 'number') && (x % 1 === 0);
    }

 

使用Math.round()方法进行检查(Checking via Math.round())

如果一个number类型调用round()函数后很接近Integer类型,那么他就是Integer类型. 方法来自于 JavaScript的 Math.round():

    function isInteger(x) {
        return Math.round(x) === x;
    }

 

运算结果如下:

    > isInteger(17)
    true
    > isInteger(17.13)
    false

 

这样也控制了 non-numbers 的正确性, 因为Math.round() 总是返回 numbers。  如果===两边的类型一致结果返回 true.

 > isInteger('')
    false

 

如果你想让你的代码计算更为清楚,你可以添加类型的检查(如我们前面所做的 typeof). 此外, Math.floor() 和Math.ceil() 也可以像Math.round()一样来判断是否为Integer.

使用位运算付进行检查(Checking via bitwise operators)

位操作符提供了一种   number 转换为 integer的方法:

   function isInteger(x) {
        return (x | 0) === x;
    }

 

该解决方案(与基于运算符的其他解决方案)有一个缺点:它不能处理超过32位数字。.

    > isInteger(Math.pow(2, 32))
    false

 

使用parseInt()进行检查(Checking via parseInt())

parseInt() 也提供了将 numbers 转换为 integers 的方法,使用起来类似于 Math.round(). 我们来可以下parseInt()是不是一个好的解决办法.

 function isInteger(x) {
        return parseInt(x, 10) === x;
    }

 

 拿Math.round() 的解决方案来说,  对 non-numbers 的处理很好,但是他不能检测所有的numbers类型是不是integers类型:

  > isInteger(1000000000000000000000)
    false

 

Why? parseint()强制它的第一个参数解析为字符串在进行数字运算之前。这不是一个很好的选择,将数字转换成整数.

    > parseInt(1000000000000000000000, 10)
    1
    > String(1000000000000000000000)
    '1e+21'

 

以上, 就是parseInt() 在解析 '1e+21'时停止解析,在解析到e的时候停止数字运算了, 这就是为什么返回1.

Other solutions

大神他相信会有更多的解决方案在 Twitter中, 感兴趣的朋友check them out.

ECMAScript 6

补充 Math.round() et al., ECMAScript 6 提供了额外的 numbers 转换为 integers的方式: Math.trunc(). 这个函数删除了number的小数部分:

    > Math.trunc(4.1)
    4
    > Math.trunc(4.9)
    4
    > Math.trunc(-4.1)
    -4
    > Math.trunc(-4.9)
    -4

不久的将来, ECMAScript 6 将添加对 integers类型的琐碎校验, 因为添加了 Number.isInteger()方法.

Further reading

  • Converting to Integer” (in “Speaking JavaScript”) covers the most common ways of converting numbers to integers.
  • Safe Integers” (in “Speaking JavaScript”) explains what range of integers can be safely used in JavaScript and what “safely used” means.

 

备注:此文章源自 Dr. Axel Rauschmayer ,一切版权都为大师所有。

详情见大师blog:http://www.2ality.com/2014/05/is-integer.html

Speaking JavaScript也是大师不错的一本书,链接地址为:http://speakingjs.com/es5/index.html#pt03

文章来源:http://www.itnose.net/detail/6051817.html
更多文章:http://www.itnose.net/type/71.html

分享到:
评论

相关推荐

    javascript常用判断函数

    此外,JavaScript还有其他很多内置的判断函数,如`isNaN`、`typeof`等,它们分别用于检测一个值是否为非数字和确定变量的类型。 在编写JavaScript代码时,正确使用这些判断函数能提高代码的健壮性和可维护性。理解...

    Validate Decimal Number in Javascript.zip

    在JavaScript中,我们可以使用`isNaN()`函数来检查一个值是否为非数字。但是,这个函数对于空字符串、空格、甚至是“null”也会返回`true`,所以它并不适合我们当前的需求。我们更需要一个能够识别并区分有效十进制...

    convert string to integer

    在上述代码中,如果`str`不能完全转换为一个整数,`Integer.parse`会抛出`ArgumentError`异常,我们可以捕获这个异常来处理错误情况。 `Fixnum`类在Ruby 2.4及更高版本中已经被废弃,但理解其概念仍然是有益的。`...

    JavaScript常用判断函数

    本文将详细介绍几个常用的JavaScript判断函数,包括`DataLength`(计算数据长度)、`IsEmpty`(判断是否为空)、`IsDigit`(判断是否为数字)、`IsInteger`(判断是否为正整数)以及`IsEmail`(判断是否为正确的电子...

    JavaScript程序设计-JavaScript中的Number对象.pdf

    - `Number.isNaN()` 示例演示了检查值是否为NaN的正确方法,即使NaN与任何值都不相等,`Number.isNaN()` 依然能正确识别。 了解这些知识点,有助于更好地理解和操作JavaScript中的数值,包括转换、验证和格式化。...

    js判断是否为数字.docx

    在JavaScript中,判断一个值是否为数字是一项常见的任务,尤其在处理用户输入或者解析数据时。本文将详细探讨如何在JavaScript中进行此类判断,并提供多种方法。 首先,我们可以使用JavaScript的内建函数`isNaN()`...

    javascript校验大全

    除了`typeof`返回`"object"`外,我们还可以使用`variable === null`来检查一个值是否为`null`。 三、数字校验 1. `isNaN()`函数用于检测一个值是否为非数字,但有时会给出意外的结果,比如`isNaN("NaN")`返回`true`...

    在b、s开发中经常用到的javaScript技术.txt

    为了确保至少有一个单选按钮被选中,可以通过遍历表单中的单选按钮组,并检查是否有至少一个选项被选中。 **示例代码:** ```javascript function checkRadioSelected(radioName, msg1, msg2) { var radios = ...

    JS开发常用工具函数小结.docx

    6. `isPlainObject` 函数用于检测一个值是否为纯JavaScript对象(非构造函数创建的对象)。它通过比较`Object.prototype.toString.call(obj)`的结果与`'[object Object]'`来判断。 7. `isArray` 函数确定一个值是否...

    javascript数字验证脚本

    在进行数字验证时,我们通常会用到`isNaN()`函数来检查一个值是否为非数字,`parseInt()`或`parseFloat()`函数来转换字符串为数字,以及`Math`对象提供的各种数学操作方法。 在创建数字验证脚本时,我们可以使用...

    JavaScript系统教程

    `isFinite()`函数可以检查一个数是否在最小值和最大值之间,即是否有限。 11. **字符串类型**:字符串可以用单引号(')或双引号(")定义,例如`var userName = 'aini';`。字符串中可以使用转义字符,如`\n`表示换行,...

    JavaScript用正则表达式验证表单

    在JavaScript中,验证一个字符串是否为有效的IPv4地址可以通过以下方式实现: ```javascript function isIP(strIP) { if (isNull(strIP)) return false; var re = /^(d+).(d+).(d+).(d+)$/; if (re.test(strIP))...

    javascript常用校验脚本

    例如,`f_check_number`函数用于检查输入值是否为数字,`f_check_integer`用于验证整数,`f_check_float`验证实数,`f_check_zh`验证汉字,`f_check_lowercase`和`f_check_uppercase`分别验证小写字母和大写字母,`f...

    javascript常用的一些校验

    - `isNaN()`函数可以用来检测一个值是否为非数字,但它的行为有时并不直观,因此通常推荐使用`Number.isNaN()`。 - 判断整数:`Number.isInteger(value)`。 - 范围校验:可以设置最小值和最大值,如`value >= ...

    JavaScript常用函数工具集-lao-utils_.docx

    4. **isNaN(value)**: 判断一个值是否是`NaN`,这个函数在JavaScript中尤其重要,因为`NaN !== NaN`,即`NaN`与自身不相等。 5. **isDom(obj)**: 这个函数用于检测传入的对象是否为DOM元素,这对于在处理DOM操作时...

    Javascript常用验证

    整数验证是JavaScript中最基本的验证类型之一,它确保输入值是一个没有小数部分的数字。正则表达式`/^(-|\+)?\d+$/.test(str)`能够完成这项任务。这里的`(-|\+)?`表示可选的正负号,`\d+`匹配一个或多个数字字符,而...

    JavaScript 中的无穷数(Infinity)详解

    在JavaScript中,判断一个值是否为无穷大可以使用`Number.isFinite()`函数。这个函数会检查给定的值是否为有限数,对于Infinity和-Infinity,它将返回`false`。 在实际编程中,Infinity和-Infinity有多种应用场景。...

    100个直接可以拿来用的JavaScript实用功能代码片段

    - **功能概述**:当文本框获得焦点时,光标定位到最后一个字符之后。 - **应用场景**:提高用户体验。 - **实现方式**:通过`focus`事件和`setSelectionRange`方法实现。 #### 24. 原生JavaScript检验URL链接是否...

    BigIntJavaScript中的任意精度整数

    在生产环境中,应当通过`typeof value === 'bigint'`来检查是否支持BigInt,并提供降级方案。 - **库的使用**:虽然有了原生的BigInt支持,但在一些老版本的JavaScript环境中,可能还需要借助第三方库,如`bn.js`或...

    在JavaScript中判断整型的N种方法示例介绍

    在JavaScript中,判断一个数值是否为整型是一个常见的需求,特别是在进行精确的数学计算或数据验证时。由于JavaScript中的所有数字本质上都是浮点数,因此需要特定的技巧来确定一个值是否为整数。以下是一些在...

Global site tag (gtag.js) - Google Analytics