判斷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();
最常見常用的判斷方法:typeof【typeof 變數】
alert(typeof a) ------------>stringalert(
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) ---------------> truealert(d
instanceof
date)
alert(f
instanceof function) ------------> true
alert(f
instanceof
function) ------------> false
注意:instanceof 後面一定要是物件型別,並且大小寫不能錯,該方法適合一些條件選擇或分支。
alert(c.constructor === array) ----------> truealert(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
;大小寫不能寫錯,比較麻煩,但勝在通用。
無敵萬能的方法: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」。
通常情況下用typeof 判斷就可以了,遇到預知object型別的情況可以選用instanceof或constructor方法,實在沒轍就使用$.type()方法。
js資料型別判斷方法
js的資料型別大體上可以分為兩種 原始型別 即基本資料型別 和物件型別 即引用資料型別 而基本資料型別細化可以分為undefined null number boolean string 而js的引用資料型別也就是物件型別object,比如 object array function data等 f...
判斷JS資料型別的方法
js是弱語言,其資料型別可以自動轉換,因此很多時候在用到資料的時刻不清楚資料的型別到底是哪種,需要進行判斷後,再執行語句。最新的ecmascript規範定義的資料型別分為兩大類,分別為基本型別和引用型別。對於資料型別的判斷,有如下的方法 tostring 方法 tostring 方法是object原...
js 判斷資料型別的封裝方法
除js內建方法外,對於數判斷據型別的實現 返回true false 是否是字串 function isstring value 是否是數字 function isnumber value 是否是布林值 function isboolean value 是否undefined function isu...