Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定JavaScript值是否为一个;整数;?_Javascript_Jquery - Fatal编程技术网

确定JavaScript值是否为一个;整数;?

确定JavaScript值是否为一个;整数;?,javascript,jquery,Javascript,Jquery,可能重复: 如何在jQuery中检查变量是否为整数 例如: if (id == int) { // Do this } 我使用下面的方法从URL获取ID var id = $.getURLParam("id"); 但我想检查变量是否为整数。尝试以下操作: if(Math.floor(id) == id && $.isNumeric(id)) alert('yes its an int!'); $.isNumeric(id)检查它是否为数字 Math.floor(id

可能重复:

如何在jQuery中检查变量是否为整数

例如:

if (id == int) { // Do this }
我使用下面的方法从URL获取ID

var id = $.getURLParam("id");
但我想检查变量是否为整数。

尝试以下操作:

if(Math.floor(id) == id && $.isNumeric(id)) 
  alert('yes its an int!');
$.isNumeric(id)
检查它是否为数字

Math.floor(id)=id
将确定它是否真的是整数值而不是浮点值。如果它是一个浮点值,将其解析为int将给出与原始值不同的结果。如果是int,则两者都相同。

使用jQuery的IsNumeric方法

更正:这不能确保一个整数。这将:

if ( (id+"").match(/^\d+$/) ) {
   //it's all digits
}

当然,这并不使用jQuery,但我假设只要解决方案有效,jQuery实际上不是强制性的

“严格使用”;
Number.isNaN=Number.isNaN||
n=>n!==n、 //唯南
Number.isNumeric=Number.isNumeric||
n=>n===+n;//不包括NaN的所有数字
Number.isFinite=Number.isFinite||
n=>n===+n//不包括NaN的所有数字
&&n>=Number.MIN_值//和-无穷大
&&n n===+n//不包括NaN的所有数字
&&n>=Number.MIN_值//和-无穷大
&&n n===+n//不包括NaN的所有数字
&&n>=Number.MIN\u SAFE\u INTEGER//和小的不安全数字
&&n n==+n;//不包括NaN的所有数字

或者,只需手动内联表达式
n===+n

对于非int值也是如此<代码>$.isNumeric(3.14)=>true@bardiir,谢谢。我现在有点好奇,像你的建议这样的正则表达式,或者像我的建议那样的类型转换:Dactually match在整数中不起作用:
var id=3;id.match(/^\d+$/)
不会导致true,但会导致一个错误:
TypeError:id.match不是一个函数
这仅在字符串上受支持,只是在测试解决方案的速度时发现。但是如果它是URL参数,它不会以字符串的形式出现吗?不管怎样,我添加了一个concat以确保它是字符串化的。我也喜欢这种方法,并给出了一个upvoteThis,如果使用
Number
类型(这是罕见的,但可能的),这将微妙地失败,因为Javascripts实现了延迟求值,我会首先检查它是否是数值的。@bardiir:这不应该是
if($.isNumeric(id)和&Math.floor(id)==id).
?我的意思是首先应该检查它是否是数字,然后如果它是真的,尝试计算下限,否则它会抛出错误。如果id是字符串,这不起作用-使用“+”强制转换,即:
if(Math.floor(id)=+id&&$.isNumeric(id))
该“重复”检查它是否是数值,而不是整数值。微妙的不同。+1这不是重复,尽管另一期中的信息有趣且相关。数值不一定是整数。应始终将基数传递到
parseInt
。在您的解决方案中尝试“08”
parseInt(n,10)
@Hemlock-从技术上讲,
isInt
在传递类似
“08”
的字符串时,必须始终返回
false
,因为它不是数值。但是,当传递类似于
“5”
的字符串时,我的函数返回
true
。除了你的论点,
parseInt
应该总是被传递一个基数参数之外,我决定重写我的函数。现在我使用表达式
+n===n&&!(n%1)
检查数字是否为整数。与之前一样,它适用于所有数字测试用例。但是现在它也过滤掉了字符串(这是您想要的)。因此,数字表示的基数没有问题。@AaditMShah谢谢!将被证明非常有用。只是重申一下(根据您上次的评论),最新的更新意味着任何字符串,例如“123”现在都将作为整数被拒绝。我必须将===更改为==因为严格相等只会导致false,因为+n的类型是整数,n的类型是字符串——至少在我的MVC项目中使用IE11时是这样。函数告诉我1不是整数,除非我使用==。我希望这对某人有帮助。
if ( (id+"").match(/^\d+$/) ) {
   //it's all digits
}