對一個值使用 typeof 操做符可能返回下列某個字符串,返回的類型都是字符串形式。數組
(1) undefined:若是這個值未定義函數
(2) boolean:若是這個值是布爾值spa
(3) string:若是這個值是字符串prototype
(4) number:若是這個值是數值code
(5) object:若是這個值是對象或null對象
(6) function:若是這個值是函數blog
須要注意:typeof不適合用於判斷是否爲數組。當使用typeof判斷數組和對象的時候,都會返回object。ip
能夠使用isArray()來判斷是否爲數組。原型鏈
instanceof 運算符用來判斷一個構造函數的prototype屬性所指向的對象是否存在另一個要檢測對象的原型鏈上。須要區分大小寫。字符串
簡單的來講,instanceof 用於判斷一個變量是否某個對象的實例。
例:var arr = new Array( );
alert(arr instanceof Array); // 返回true
須要注意的是,instanceof只能用來判斷對象和函數,不能用來判斷字符串和數字等。判斷它是否爲字符串和數字時,只會返回false。
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
以上三種方法多少都會有一些不能判斷的狀況。爲了保證兼容性,能夠經過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;