js判斷資料型別

cosyer發表於2018-11-30

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
複製程式碼

部落格地址

github

相關文章