We know that JavaScript provides the typeof operator, so the easiest thing to think of is to use typeof to determine whether it is a number type.
Copy the code as follows:
function isNumber(obj) { return typeof obj === 'number' }
This function has no problem with integers and floating point numbers, but it also returns true for NaN values, which makes people feel uncomfortable. After all, no one will use NaN after using isNumber to judge. Arithmetic operations.
Then improve it and try using Object.prototype.toString.
Copy code code is as follows:
function isNumber(obj) { return Object.prototype.toString.call(obj) === '[object Number]' }
This time, if the input is a non-number (NaN or a value that can be converted to NaN), false will be returned
Copy code code is as follows:
function isNumber(obj) { return typeof obj === 'number' && !isNaN(obj) } isNumber(1) // true isNumber(1.2) // true isNumber(NaN) // false isNumber( parseInt('a') ) // false
Well, this isNumber is good, but there is an equivalent one, use isFinite to judge
Copy the code as follows:
function isNumber(obj) { return typeof obj === 'number' && isFinite(obj) }
Up to now, the shortest code for numeric judgment is the third one mentioned in this article that uses the isNaN function. Here is the world's shortest digital judgment web code
Copy the code as follows:
function isNumber(obj) { return obj === +obj }
Returns true for integers and floating point numbers, and returns false for NaN or values that can be converted to NaN.
You don’t understand? Gu~~(╯﹏╰)
Garden friends said that this is not the shortest judgment numeric code in the world, and the parameter obj can be changed to one character. (⊙o⊙) You are right.
By analogy, there is a similar shortest judgment using JS dynamic language features (automatic internal type conversion during operator operation).
Copy the code code as follows:
// 判断字符串 function isString(obj) { return obj === obj+'' } // 判断布尔类型 function isBoolean(obj) { return obj === !!obj }