2016-10-20 35 views
1

現在,我使用這個功能來確定一個數是否爲整數:有沒有一種更有效率或更好的方式來確定一個數字是否是一個整數?

function isInteger(input){ 
    return (input%1==0); 
} 

是有沒有更有效的方式來做到這一點?我知道這裏有一個內置的javascript函數,但它在某些IE版本中不起作用。

+0

這裏更有效的方式做到這一點:[鏈接](https://jsperf.com/numbers-and-integers) –

+0

也許你想用'返回的typeof輸入===「number'' ,它支持IE [檢查MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) –

+0

@VitaliiStrimbanu一個數字不一定是整數,例如,看看'3.14'。 – vlaz

回答

3

根據jsPerf~~repeated bitwise NOT)和<< 0(移位0位向左)是在瀏覽器中更快:

function isInteger(input) { 
    return (~~input === input); 
} 

function isInteger2(input) { 
    return (input << 0 === input); 
} 

警告: JavaScript按位運算符強制其操作數爲signed 32-bit integers,所以這種方法od只能安全用於Math.pow(2, 31) -1(2147483647)。如果您不能保證,請使用其他方法。

另一方法中,n % 1 === 0Math.floor(value) === value較慢40-50%和Number.isInteger是遠遠落後。

但是,它們都「非常快」。除非您必須檢查批號,否則這些方法都不可能是您應用程序的瓶頸。

+0

BITWISE'不'是危險的!按位數算術將任何數字視爲32位,所以數量很大時,您將得到一個溢出'~~ 10000000000 // 141006540​​8' – vlaz

+0

我澄清說,當您在評論時,謝謝 – joews

-2
function isInt(val) { 
    return val + 0 === val; 
} 
+1

但是'1.5 + 0 === 1.5' – joews

相關問題