JS中檢測資料型別的幾種方式

2021-09-24 01:14:59 字數 4803 閱讀 1758

判斷js中的資料型別有一下幾種方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下來主要比較一下這幾種方法的異同。

var a =

"iamstring."

;var b =

222;

var c=[1

,2,3

];var d =

newdate()

;vare=

function()

;varf=

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

另外typeof 可以判斷function的型別;在判斷除object型別的物件時比較方便。

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: functiona(

);functionb(

);a.prototype =

newb()

;//a繼承自b

var aobj =

newa()

;alert

(aobj.constructor ===b)

----

-------

>

true

;alert

(aobj.constructor ===a)

----

-------

>

false

;而instanceof方法不會出現該問題,物件直接繼承和間接繼承的都會報true:

alert

(aobj instanceofb)

----

----

----

----

>

true

;alert

(aobj instanceofb)

----

----

----

----

>

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」。

通常情況下用typeof 判斷就可以了,遇到預知object型別的情況可以選用instanceof或constructor方法,實在沒轍就使用$.type()方法。

JS關於資料型別檢測的幾種方式

js中我們只用乙個var就能定義所有型別的變數,非常方便,但是也同樣給我們造成了困擾,如果我們想知道乙個函式的返回值是什麼型別的,或者輸入的資訊是什麼型別的時候就要通過對資料進行檢測,所以我們該如何進行資料型別的檢測呢?資料型別檢測方式 typeof typeof 用來檢測資料型別的運算子 使用方式...

資料型別檢測的幾種方式

1.typeof 缺點 對null和array等型別的檢測不是很方便 typeof null object typeof object 2.instanceof 缺點 1.只適用於物件型別 2.只要當前的這個類在例項的原型鏈上,檢測出來的結果都是true 123 instanceof number ...

js判斷資料型別的幾種方式

資料型別分為 基礎資料型別和引用 物件 資料型別 基礎資料型別 number string boolean undefined null 常見的引用資料型別 funciton object array 第一種,當資料型別是undefined null 時,可以用 來進行判斷 undefined un...