JavaScript數據類型判斷

JavaScript中有5種基本數據類型:undefined,String,Boolean,Number,Null,以及一種複雜數據類型Object。平常工做中常常會有判斷數據類型的需求,這裏簡單介紹下我平時判斷數據類型的幾種方式。函數

1. typeof操做符

語法學習

typeof variable

對一個值使用typeof會返回以下字符串prototype

  • 'undefined' 這個值未定義
  • 'string' 這個值是字符串
  • 'object' 這個值是對象或者null
  • 'function' 這個值是函數
  • 'number' 這個值是數值
  • 'boolean' 這個值是布爾值

example:code

var a;
console.log(typeof a) // 'undefined'
var b = 123;
console.log(typeof b) // 'number'

typeof是一個操做符,並非做爲全局對象的一個方法存在的,因此儘管能夠像typeof(123)這樣調用,但圓括號並非必須的。對象

2. instanceof操做符

當咱們檢測的數據類型是基本類型的時候,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原型

3. Object.prototype.toString.call(data)

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'

4.小結

關於我在js中判斷數據類型的方式,就到這裏了。若是有什麼其它的建議,歡迎指點,讓你們互相交流,互相學習,一塊兒進步!最後,祝你們節日快樂!

相關文章
相關標籤/搜索