如何判斷js中的資料型別

2021-07-24 21:47:20 字數 2659 閱讀 7264

ps:本人親測,阿里雲2核4g5m的伺服器價效比很高,新使用者一塊多一天,老使用者三塊多一天,最高可以買三年,感興趣的可以戳一下:阿里雲折扣伺服器

如何判斷js中的資料型別:typeof、instanceof、 constructor、 prototype方法比較

如何判斷js中的型別呢,先舉幾個例子:

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new date();

var e = function();

var f = function();

最常見的判斷方法:typeof

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型別的物件時比較方便。

判斷已知物件型別的方法: instanceof

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

alert(d instanceof date)

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

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

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

根據物件的constructor判斷: constructor

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了;

通用但很繁瑣的方法: prototype

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;

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

通常情況下用typeof 判斷就可以了,遇到預知object型別的情況可以選用instanceof或constructor方法

如何判斷js中的資料型別

如何判斷js中的資料型別 typeof instanceof constructor prototype方法比較 如何判斷js中的型別呢,先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new date var e function var f ...

如何判斷 js 中的資料型別

如何判斷js中的資料型別 typeof instanceof constructor prototype方法比較 如何判斷js中的型別呢,先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new date var e function var f ...

JS如何判斷資料型別

首先我們要清楚基本型別與引用型別分別是指什麼。基本型別 undefined null string number boolean symbol es6 引用型別 object array regexp date function 1.typeof typeof的返回值一共有七種,分別為 string...