JavaScript中有5種基本數據類型:
undefined
,String
,Boolean
,Number
,Null
,以及一種複雜數據類型Object
。平常工做中常常會有判斷數據類型的需求,這裏簡單介紹下我平時判斷數據類型的幾種方式。函數
語法學習
typeof variable
對一個值使用typeof會返回以下字符串prototype
example:code
var a; console.log(typeof a) // 'undefined' var b = 123; console.log(typeof b) // 'number'
typeof是一個操做符,並非做爲全局對象的一個方法存在的,因此儘管能夠像
typeof(123)
這樣調用,但圓括號並非必須的。對象
當咱們檢測的數據類型是基本類型的時候,typeof能很好的知足咱們的需求,但在檢測引用類型的時候就顯得有些力不從心了,一般咱們並非想知道某個值是對象,而是想知道它是什麼類型的對象。所以,JavaScript提供了instanceof操做符。ip
語法原型鏈
result = variable instanceof constructor
若是這個值是給定引用類型的實例,那麼instanceof操做符就會返回true,不然會返回false。開發
example:字符串
var obj = {}; console.log(obj instanceof Object); //true console.log(obj instanceof RegExp); //false
當使用instanceof檢測基本類型時,會始終返回false原型
instanceof操做符確實解決了類型判斷的問題,但仍是有一些不足之處。因爲instanceof是根據數值原型鏈來識別數據類型的,可是JS中全部引用類型都是Object的實例,所以在檢測一個引用類型的值與Object時,會始終返回true。此外,instanceof只能返回true/false,並不能直接返回數據的類型。所以,這裏給你們介紹一種更直觀的檢測方式。
調用Object.prototypeto.String.call(data)
會返回一個字符串,如
Object.prototype.toString.call(123) // "[object Number]" Object.prototype.toString.call('123') // "[object String]" Object.prototype.toString.call([123]) // "[object Array]" Object.prototype.toString.call(/123/) // "[object RegExp]"
是否是很直觀呢,爲了方便使用,還能夠作一些簡單的處理,進一步的封裝爲一個函數,來供咱們在開發中使用。
function checkType(data) { return {}.toString.call(data).match(/[A-Z]\w+/)[0] }; console.log(checkType(123)) // 'Number' console.log(checkType([123])) // 'Array' console.log(checkType(/123/)) // 'RegExp' console.log(checkType(null)) // 'Null'
關於我在js中判斷數據類型的方式,就到這裏了。若是有什麼其它的建議,歡迎指點,讓你們互相交流,互相學習,一塊兒進步!最後,祝你們節日快樂!