js資料型別判斷

2021-10-01 18:29:40 字數 4887 閱讀 8504

typeof、instanceof、constructor、object.prototype.tostring.call()、jquery.type()

1 .typeof

console.log(

typeof 100, //"number"

typeof 'abc', //"string"

typeof false, //"boolean"

typeof undefined, //"undefined"

typeof null, //"object"

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

typeof , //"object"

typeof function(), //"function"

typeof new date(), //"object"

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

typeof new error() //"object"

typeof new number(100), //'object'

typeof new string('abc'),// 'string'

typeof new boolean(true),//'boolean'

);

基本資料型別中:number,string,boolean,undefined 以及引用資料型別中function ,可以使用typeof檢測資料型別,分別返回對應的資料型別小寫字元。

另:用typeof檢測建構函式建立的number,string,boolean都返回object

基本資料型別中:null 。引用資料型別中的:array,object,date,regexp。不可以用typeof檢測。都會返回小寫的object

2 . instanceof

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

console.log(

100 instanceof number, //false

'dsfsf' instanceof string, //false

false instanceof boolean, //false

undefined instanceof object, //false

null instanceof object, //false

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

instanceof object, //true

function() instanceof function, //true

new date() instanceof date, //true

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

new error() instanceof error //true

)

基本資料型別中:number,string,boolean。字面量值不可以用instanceof檢測,但是建構函式建立的值可以,如下:

var num = new number(123);

var str = new string('dsfsf');

var boolean = new boolean(false);

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

3 .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屬性來判斷型別。

4 . 使用object.prototype.tostring.call()檢測物件型別

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()的方式來判斷乙個變數的型別是最準確的方法。

5 .無敵萬能的方法:jquery.type()

如果物件是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」

6 . 自己也可以封裝乙個獲取變數準確型別的函式

function gettype(obj) 

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

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

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

}

js判斷資料型別

1 typeof 形如 var x xx typeof x string 返回型別有 undefined string number boolean function object 缺點 對於object型別不能細分是什麼型別 優點 對空null的判斷 undefined 的應用 2 instanc...

js判斷資料型別

了解js的都知道,有個typeof 用來判斷各種資料型別,有兩種寫法 typeof typeof 如下例項 typeof 2 輸出 number typeof null 輸出 object typeof 輸出 object typeof 輸出 object typeof function 輸出 fu...

js判斷資料型別

1 判斷是否為陣列型別 2 判斷是否為字串型別 3 判斷是否為數值型別 isnan 變數 如果為true就是數字型別 注意這個函式一般針對數字型別來判斷是否值為nan,若變數為非數字型別,則先轉化為數字型別再做判斷,用此函式時,別忘考慮空串和空格 這倆轉化為數字是0 4 判斷是否為日期型別 5 判斷...