【发布时间】:2016-10-20 20:30:00
【问题描述】:
现在我正在使用这个函数来确定一个数字是否为整数:
function isInteger(input){
return (input%1==0);
}
有没有更有效的方法来做到这一点?我知道有一个内置的 javascript 函数,但它在某些 IE 版本中不起作用。
【问题讨论】:
标签: javascript integer
现在我正在使用这个函数来确定一个数字是否为整数:
function isInteger(input){
return (input%1==0);
}
有没有更有效的方法来做到这一点?我知道有一个内置的 javascript 函数,但它在某些 IE 版本中不起作用。
【问题讨论】:
标签: javascript integer
根据jsPerf、~~ (repeated bitwise NOT) 和<< 0(左移 0 位)在我的浏览器中速度更快:
function isInteger(input) {
return (~~input === input);
}
function isInteger2(input) {
return (input << 0 === input);
}
警告:JavaScript 位运算符将其操作数强制为signed 32-bit integers,因此此方法仅对
Math.pow(2, 31) -1(2147483647) 以下的数字安全。如果不能保证,请使用其他方法。
在其他方法中,n % 1 === 0 和 Math.floor(value) === value 慢 40-50%,Number.isInteger 远远落后。
但是,它们都“相当快”。除非您必须检查 很多 数字,否则这些方法都不会成为您应用程序的瓶颈。
【讨论】:
NOT 很危险!按位数算术将任何数视为 32bit,因此对于大数,您将得到溢出~~10000000000// 1410065408
function isInteger(input){
Number.isInteger(input)
}
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
【讨论】:
function isInt(val) {
return val + 0 === val;
}
【讨论】:
1.5 + 0 === 1.5