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

2021-08-28 20:25:15 字數 4024 閱讀 4355

判斷js中的資料型別有一下幾種方法: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(typeof a) ------------> string

alert(typeof b) ------------> number

alert(typeof c) ------------> object

alert(typeof d) ------------> object

alert(typeof e) ------------> function

alert(typeof f) ------------> function

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

alert(typeof a == "string") -------------> true

alert(typeof a == string) ---------------> false

另外typeof 可以判斷function的型別;在判斷除object型別的物件時比較方便。

alert(c instanceof array) ---------------> true

alert(d instanceof date)

alert(f instanceof function) ------------> true

alert(f instanceof function) ------------> false

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

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

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

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

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

eg:

function a(){};

function b(){};

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

var aobj = new a();

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

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

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

alert(aobj instanceof b) ----------------> true;

alert(aobj instanceof b) ----------------> 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( new date() ) === "date"

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

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

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

通常情況下用typeof 判斷就可以了,遇到預知object型別的情況可以選用instanceof或constructor方法,實在沒轍就使用$.type()方法。

js判斷資料型別幾種方法

js資料型別的判斷主要有四種方法 typeof instanceof constructor object.prototype.tostring.call 資料型別的包括 number boolean string symbol object array undefined null functio...

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

1.typeof 鑑於 ecmascript 是鬆散型別的,因此需要有種手段來檢測給定變數的資料型別,typeof 就是負責提供這方面資訊的操作符。對乙個值使用 typeof 操作符可能返回下列某個字串 缺點 對於陣列和物件或null 都會返回object undefined 如果這個值未定義 bo...

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

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