判斷js中的資料型別的5種方法

2021-10-23 04:14:26 字數 4756 閱讀 1014

判斷js中的資料型別有以下5種方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下來主要比較一下這幾種方法的異同。

先列幾個樣例:

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new date();

var e = function();

var f = function();

alert(typeofa)  ------------> string

alert(typeofb)  ------------> number

alert(typeofc)  ------------> object

alert(typeofd)  ------------> object

alert(typeofe)  ------------>function

alert(typeoff)  ------------>function

其中typeof返回的型別都是字串形式,需注意,例如:

alert(typeofa =="string") ------------->true

alert(typeofa == string) --------------->false

alert(cinstanceofarray) --------------->true

alert(dinstanceofdate)

alert(finstanceoffunction) ------------>true

alert(finstanceoffunction) ------------>false

注意:instanceof 後面一定要是物件型別,並且大小寫不能錯,該方法適合一些條件選擇或分支。 

alert(c.constructor === array) ----------> true

alert(d.constructor === date) -----------> true

alert(e.constructor === function) -------> true

注意: constructor 在類繼承時會出錯

eg:functiona(){};

functionb(){};

a.prototype =newb();//a繼承自b

varaobj =newa();

alert(aobj.constructor = = = b) ----------->true;

alert(aobj.constructor = = = a) ----------->false;

而instanceof方法不會出現該問題,物件直接繼承和間接繼承的都會報true:

alert(aobjinstanceofb) ---------------->true;

alert(aobjinstanceofb) ---------------->true;

言歸正傳,解決construtor的問題通常是讓物件的constructor手動指向自己:

aobj.constructor = a;//將自己的類賦值給物件的constructor屬性

alert(aobj.constructor === a) ----------->true;

alert(aobj.constructor === b) ----------->false;//基類不會報true了;

alert(object.prototype.tostring.call(a) === 『[object string]') -------> true;

alert(object.prototype.tostring.call(b) === 『[object number]') ------->true;

alert(object.prototype.tostring.call(c) === 『[object array]') -------> true;

alert(object.prototype.tostring.call(d) === 『[object date]') ------->true;

alert(object.prototype.tostring.call(e) === 『[object function]') -------> true;

alert(object.prototype.tostring.call(f) === 『[object function]') ------->true;

大小寫不能寫錯,比較麻煩,但勝在通用。

如果物件是undefined或null,則返回相應的「undefined」或「null」。

jquery.type( undefined ) ==="undefined"

jquery.type() ==="undefined"

jquery.type( window.notdefined ) ==="undefined"

jquery.type(null) ==="null"

如果物件有乙個內部的[[class]]和乙個瀏覽器的內建物件的 [[class]] 相同,我們返回相應的 [[class]] 名字。

jquery.type(true) ==="boolean"

jquery.type( 3 ) ==="number"

jquery.type("test") ==="string"

jquery.type(function(){} ) ==="function"

jquery.type( ) ==="array"

jquery.type(newdate() ) ==="date"

jquery.type(newerror() ) ==="error"// as of jquery 1.9

jquery.type( /test/ ) ==="regexp"

其他一切都將返回它的型別「object」。

JS判斷資料型別的4種方法

4種判斷方法分別是 可判斷的型別對比如下圖 建構函式名方法 function getconstructorname data 物件原型方法 不能判斷自定義函式物件型別 function getprototypename data 自定義的建構函式 function func var newobj n...

js中判斷資料型別的幾種方法

1.typeof typeof data 返回data的型別字串形式。如 typeof a string typeof返回的值 1 undefined 如果這個值未定義 2 boolean 如果這個值是布林值 3 string 如果這個值是字串 4 number 如果這個值是數字 5 functio...

js判斷資料型別的幾種方法

判斷js中的資料型別有一下幾種方法 typeof instanceof constructor prototype type jquery.type 接下來主要比較一下這幾種方法的異同。先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new da...