typeof
typeof一般只能返回如下幾個結果:number,boolean,string,function,object,undefined字串
對於Array,null等特殊物件使用typeof一律返回object,這正是typeof的侷限性。
在判斷除Object型別的物件時比較方便。
var fn = new Function ('a', 'b', 'return a + b')
typeof fn // function
複製程式碼
instanceof
instanceof適用於檢測物件,它是基於原型鏈運作的。
instanceof 運算子用來測試一個物件在其原型鏈中是否存在一個建構函式的 prototype 屬性。換種說法就是如果左側的物件是右側物件的例項, 則表示式返回true, 否則返回false 。
instanceof對基本資料型別檢測不起作用,因為基本資料型別沒有原型鏈。
[1, 2, 3] instanceof Array // true
/abc/ instanceof RegExp // true
({}) instanceof Object // true
(function(){}) instanceof Function // true
複製程式碼
Object.prototype.toString.call
可以檢測各種資料型別,推薦使用。
Object.prototype.toString.call([]); // => [object Array]
Object.prototype.toString.call({}); // => [object Object]
Object.prototype.toString.call(''); // => [object String]
Object.prototype.toString.call(new Date()); // => [object Date]
Object.prototype.toString.call(1); // => [object Number]
Object.prototype.toString.call(function () {}); // => [object Function]
Object.prototype.toString.call(/test/i); // => [object RegExp]
Object.prototype.toString.call(true); // => [object Boolean]
Object.prototype.toString.call(null); // => [object Null]
Object.prototype.toString.call(); // => [object Undefined]
複製程式碼
var isType = function( type ){
return function( obj ){
return Object.prototype.toString.call( obj ) === '[object '+ type +']';
}
};
var isString = isType( 'String' );
var isArray = isType( 'Array' );
var isNumber = isType( 'Number' );
console.log( isArray( [ 1, 2, 3 ] ) ); //true
複製程式碼