Judgment method: 1. Use the "value%1===0" statement; 2. Use the "Math.floor(value)===value" statement; 3. Use "parseInt(value, 10) === value" statement; 4. Use the "(value|0)=== value" statement; 5. Use the "Number.isInteger(value)" statement.
The operating environment of this tutorial: windows7 system, javascript version 1.8.5, Dell G3 computer.
JavaScript does not distinguish between integers and floating point numbers. All numbers are internally represented in a 64-bit floating point format, the same as Java's double type. However, actual operations such as array indexing and bit operations are based on 32-bit integers. So how to determine whether it is an integer type (Integer)?
Method 1. Use the remainder operator to determine
Any integer will be divisible by 1, that is, the remainder is 0. Use this rule to determine whether it is an integer.
function isInteger(obj) { return obj%1 === 0 } isInteger(3) // true isInteger(3.3) // false
It can be seen from the above output that this function is very useful, but it is not capable of strings and certain special values.
isInteger('') // true isInteger('3') // true isInteger(true) // true isInteger([]) // true
For empty strings, string type numbers, Boolean true, and empty The arrays all returned true, which is really unacceptable. If you are interested in the internal conversion details of these types, please refer to: Weird False Values in JavaScript
Therefore, you need to first determine whether the object is a number, such as adding a typeof
function isInteger(obj) { return typeof obj === 'number' && obj%1 === 0 } isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
Well, like this It's relatively perfect.
Method 2. Use Math.floor to determine if
the integer is still equal to itself after rounding. Use this feature to determine whether it is an integer. Math.floor example, as shown below
function isInteger(obj) { return Math.floor(obj) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
This directly masks the string, true, [], and the amount of code is less than the previous function.
Method three, judging by parseInt
function isInteger(obj) { return parseInt(obj, 10) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
is very good, but there is also a shortcoming
isInteger(1000000000000000000000) // false
It actually returns false, which is unreasonable. The reason is that parseInt forces the first argument to be parsed into a string before parsing the integer. This method of converting numbers to integers is not a good choice.
Method 4. Judgment through bit operations
function isInteger(obj) { return (obj | 0) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
This function is very good and very efficient. But there is a flaw. As mentioned above, bit operations can only handle numbers within 32 bits, and cannot do anything with more than 32 bits, such as
isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了
Of course, most of the time we will not use such large numbers. .
Method 5. ES6 provides Number.isInteger
Number.isInteger(3) // true Number.isInteger(3.1) // false Number.isInteger('') // false Number.isInteger('3') // false Number.isInteger(true) // false Number.isInteger([]) // false
Currently, the latest Firefox and Chrome already support it.
Note: Each of these five methods has its own advantages and disadvantages. You can compare them carefully and choose the best one for use.
[Recommended learning: javascript advanced tutorial]
The above is the detailed content of How to determine whether a value is an integer in javascript. For more information, please follow other related articles on the PHP Chinese website!