如何判斷js中的數據類型

typeof、instanceof、 constructor、 prototype方法比較

1. 使用typeof操做符。

  對一個值使用 typeof 操做符可能返回下列某個字符串,返回的類型都是字符串形式。數組

  (1) undefined:若是這個值未定義函數

  (2) boolean:若是這個值是布爾值spa

  (3) string:若是這個值是字符串prototype

  (4) number:若是這個值是數值code

  (5) object:若是這個值是對象null對象

  (6) function:若是這個值是函數blog

  須要注意:typeof不適合用於判斷是否爲數組。當使用typeof判斷數組和對象的時候,都會返回object。ip

       能夠使用isArray()來判斷是否爲數組。原型鏈

 

2. instanceof

  instanceof 運算符用來判斷一個構造函數的prototype屬性所指向的對象是否存在另一個要檢測對象的原型鏈上。須要區分大小寫。字符串

  簡單的來講,instanceof 用於判斷一個變量是否某個對象的實例。

  例:var arr = new Array( );

    alert(arr instanceof Array);   // 返回true

  須要注意的是,instanceof只能用來判斷對象和函數,不能用來判斷字符串和數字等。判斷它是否爲字符串和數字時,只會返回false。

 

 3. constructor

  constructor 屬性返回對建立此對象的數組函數的引用。

  在JavaScript中,每一個具備原型的對象都會自動得到constructor屬性。

  例:

  如下代碼中的[native code],表示這是JavaScript的底層內部代碼實現,沒法顯示代碼細節。  

// String
var str = "字符串";
alert(str.constructor); // function String() { [native code] }
alert(str.constructor === String); // true

// Array
var arr = [1, 2, 3];
alert(arr.constructor); // function Array() { [native code] }
alert(arr.constructor === Array); // true

// Number
var num = 5;
alert(num.constructor); // function Number() { [native code] }
alert(num.constructor === Number); // true

 

4. prototype

  以上三種方法多少都會有一些不能判斷的狀況。爲了保證兼容性,能夠經過Object.prototype.toString方法,判斷某個對象值屬於哪一種內置類型。

  須要注意區分大小寫。

alert(Object.prototype.toString.call(「字符串」) === ‘[object String]’) -------> true;
alert(Object.prototype.toString.call(123) === ‘[object Number]’) -------> true;
alert(Object.prototype.toString.call([1,2,3]) === ‘[object Array]’) -------> true;
alert(Object.prototype.toString.call(new Date()) === ‘[object Date]’) -------> true;
alert(Object.prototype.toString.call(function a(){}) === ‘[object Function]’) -------> true;
alert(Object.prototype.toString.call({}) === ‘[object Object]’) -------> true;
相關文章
相關標籤/搜索