判斷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(
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
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」。
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...