方法一【推薦】:javascript
最容易想到的是用typeof來判斷是不是number類型 ,可是若是爲NaN會被認爲也是number類型,所以咱們須要使用isNaN來排除NaN的狀況。 java
function isNumber(obj) { return typeof obj === 'number' && !isNaN(obj) }
方法二:prototype
isNaN(obj) 等價於isFinite()。Infinity在js表示數字的無窮大,判斷是否可用作數字的最佳方法則是isFinite(),由於該方法會篩除掉NaN和Infinity兩個關鍵字。blog
function isNumber(obj) { return typeof obj === 'number' && isFinite(obj) }
方法三:ip
不使用typeof,能夠用Object.prototype.toString來實現,只是代碼量稍微比較大而已。字符串
function isNumber(obj) { return Object.prototype.toString.call(obj) === '[object Number]' && !isNaN(obj) }
或者it
function isNumber(obj) { return Object.prototype.toString.call(obj) === '[object Number]' && isFinite(obj) }
方法四:io
聽說這個方法是世界上最短的數字判斷代碼 function
function isNumber(obj) { return obj === +obj }
下面是該方法的延伸。class
一、判斷字符串 :
function isString(obj) { return obj === obj+'' }
二、判斷布爾類型
function isBoolean(obj) { return obj === !!obj }
方法五【推薦】:
使用正則來實現,這也是咱們最經常使用的方式
function isNumber(obj) { var reg = /^[0-9]+.?[0-9]*$/; if (reg.test(obj)) { return true; } return false; }
引用:http://www.fly63.com/article/detial/812