判斷資料型別

2021-09-28 11:31:59 字數 4159 閱讀 5880

typeof

如果使用typeof來判斷資料型別的話,結果如下:

var num = new number('123');

var str = new string('1223');

var bool = new boolean(false);

console.log(

typeof 123, //"number"

typeof num, //"object"

typeof 'dsfsf', //"string"

typeof str,//"object"

typeof false, //"boolean"

typeof bool,//"object"

typeof [1,2,3], //"object"

typeof , //"object"

typeof function(), //"function"

typeof undefined, //"undefined"

typeof null, //"object"

typeof new date(), //"object"

typeof /^[a-za-z]$/, //"object"

typeof new error() //"object"

);

以上結果都是在chrome瀏覽器裡執行結果,可以發現如下規律

array,object,null,date,regexp,error這幾個型別都被typeof判斷為object,所以如果想要判斷這幾種型別,就不能使用typeof了。

number,string,boolean,function,undefined,如果想判斷這幾種型別,那就可以使用typeof。

instanceof

除了使用typeof來判斷,還可以使用instanceof。instanceof運算子需要指定乙個建構函式,或者說指定乙個特定的型別,它用來判斷這個建構函式的原型是否在給定物件的原型鏈上。

結果如下:

console.log(

123 instanceof number, //false

'dsfsf' instanceof string, //false

false instanceof boolean, //false

[1,2,3] instanceof array, //true

instanceof object, //true

function() instanceof function, //true

undefined instanceof object, //false

null instanceof object, //false

new date() instanceof date, //true

/^[a-za-z]$/ instanceof regexp, //true

new error() instanceof error //true

)

可以發現如下規律:

number,string,boolean沒有檢測出他們的型別,但是如果使用下面的寫法則可以檢測出來:

var num = new number(123);

var str = new string('dsfsf');

var boolean = new boolean(false);

還需要注意null和undefined都返回了false,這是因為它們的型別就是自己本身,並不是object建立出來它們,所以返回了false。

constructor

constructor是prototype物件上的屬性,指向建構函式。根據例項物件尋找屬性的順序,若例項物件上沒有例項屬性或方法時,就去原型鏈上尋找,因此,例項物件也是能使用constructor屬性的。

如果輸出乙個型別的例項的constructor,就如下所示:

console.log(new number(123).constructor)

//ƒ number()

可以看到它指向了number的建構函式,因此,可以使用num.constructor==number來判斷乙個變數是不是number型別的。

var num  = 123;

var str = 'abcdef';

var bool = true;

var arr = [1, 2, 3, 4];

var json = ;

var func = function()

var und = undefined;

var nul = null;

var date = new date();

var reg = /^[a-za-z]$/;

var error= new error();

function person()

var tom = new person();

// undefined和null沒有constructor屬性

console.log(

tom.constructor==person,

num.constructor==number,

str.constructor==string,

bool.constructor==boolean,

arr.constructor==array,

json.constructor==object,

func.constructor==function,

date.constructor==date,

reg.constructor==regexp,

error.constructor==error

);//所有結果均為true

除了undefined和null之外,其他型別都可以通過constructor屬性來判斷型別。

使用tostring()檢測物件型別

var tostring = object.prototype.tostring;

tostring.call(123); //"[object number]"

tostring.call('abcdef'); //"[object string]"

tostring.call(true); //"[object boolean]"

tostring.call([1, 2, 3, 4]); //"[object array]"

tostring.call(); //"[object object]"

tostring.call(function()); //"[object function]"

tostring.call(undefined); //"[object undefined]"

tostring.call(null); //"[object null]"

tostring.call(new date()); //"[object date]"

tostring.call(/^[a-za-z]$/); //"[object regexp]"

tostring.call(new error()); //"[object error]"

這樣可以看到使用object.prototype.tostring.call()的方式來判斷乙個變數的型別是最準確的方法。

封裝乙個獲取變數準確型別的函式

function gettype(obj) 

//如果不是object型別的資料,直接用typeof就能判斷出來

//如果是object型別資料,準確判斷型別必須使用object.prototype.tostring.call(obj)的方式才能判斷

return object.prototype.tostring.call(obj).replace(/^\[object (\s )\]$/, '$1');

}

這樣判斷乙個變數的資料型別就很方便了。

更多專業前端知識,請上

【猿2048】www.mk2048.com

判斷資料型別

typeof 判斷基本資料型別 不能區分null object 弊端不能區分 陣列 物件 和 null console.log typeof dddd console.log typeof 12 console.log typeof true console.log typeof undefined...

資料型別判斷

可以判斷基本資料型別,它返回的資料型別的字串 返回結果只能包括number,boolean,string,function,object,undefined 但不能判斷null array,可以使用typeof判斷變數是否存在 如if typeof a undefined 但是對於一些建立的物件,它...

判斷資料型別

1 typeof 只能判斷基本資料型別,不能判斷引用資料型別 判斷出來的都是object string number boolean undefined object function symbol 2 instanceof 判斷乙個物件是否是乙個類的例項 只能進行型別的對比,不能進行型別的判斷 3...