有多少种方法可以检查x是否为整数,哪种方法最有效



我已经检查了在javascript中检查变量类型的最佳方式关于So的问题,但并没有找到我问题的答案。

在javascript中,如果输入类型是integer,有多少种方法可以找到?哪一个是有效的?

我一直在寻找在javascript中找到整数的方法,并找到了很多方法:

  1. 使用typeof

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

}
console.log(isInteger(10));
console.log(isInteger(10.1))

  1. 使用parseInt

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

}
console.log(isInteger(10));
console.log(isInteger(10.1));

  1. 使用Math.round

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

}
console.log(isInteger(10));
console.log(isInteger(10.1));

有没有其他方法可以找到Integer的类型,以及哪种方法对于考虑从小到大的整数值最有效。

最直观的是Number.isIInteger((,至少在我看来是

function isInteger(x)
{ 
return Number.isInteger(x); 

}
console.log(isInteger(10)); // Output: True
console.log(isInteger(10.1)); // Output: False

编辑

至于效率,我在jsben.ch上创建了一个基准,在那里我尝试了你和我的所有方法,你可以自己看到;(

链接

我刚刚在JSBEN.CH 上测试了每个代码的速度

typeof => 347 ms
parseInt => 338 ms
Math.round => 367 ms

有趣的是,parseInt是最快的方式!

这只是速度比较。改为使用Number.isInteger(x)!这是本能的&最快的。

您的主张似乎很好,但让我们补充一下polyfill Mozilla提出的内容:

Number.isInteger = Number.isInteger || function(value) {
return typeof value === 'number' && 
isFinite(value) && 
Math.floor(value) === value;
};

我在重新研究后得出了这个问题的结论

来自ECMAscript 6,它正是为此目的引入了一个新的Number.isInteger()函数。

但是,在ECMAScript 6之前,由于没有提供等效的Number.isInteger()方法,所以这有点复杂。

最简单、最干净的pre-ECMAScript-6解决方案(即使将字符串或null等非数字值传递给函数,它也足够健壮,可以返回false(是bitwise XOR operator:的以下使用

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

其他如Math.round()typeofparseInt也可以用于查找Integer

虽然这种基于parseInt的方法对x的许多值都能很好地工作,但一旦x变得很大,它将无法正常工作。问题是parseInt()在解析数字之前将其第一个参数强制为字符串。因此,一旦数字变得足够大,其字符串表示将以指数形式呈现(例如,1e+21(。因此,parseInt()随后将尝试解析1e+21,但当其达到e字符时将停止解析,因此将返回值1

最新更新