javascript:物件類型檢查

來源:互聯網
上載者:User

我們知道,javascript是一種弱類型的語言,並且,javascript中的一切實質上都是對象。那麼,在javascript中如何進行對象的類型檢查將是一個非常重要的話題。

這裡,我將介紹兩種在js中經常使用的用於類型檢測的方法。

 

第一種方法是使用"typeof"操作符,這種方法可能大家都知道。使用它來進行類型檢測的結果是下列六個字串中的其中一個:"number","boolean","object","number","function","string"。不錯,使用這個操作符,絕大部分的物件類型我們都可以檢測到,但是,這裡有一個例外:那就是在使用數組的時候。javascript本身對於數組和對象的區別是混亂的,typeof運算子報告數組和對象的類型都是"object",因此,javascript在區別數組和對象的方式上並沒有yield好的機制。

例如:

var arr=[1,2,3,4,5]<br />var obj={"name":"xiaoming","sex":"nan"};<br />alert(typeof arr)//返回"object"<br />alert(typeof obj)//返回"object" 

那麼,我們該如何判別這種特殊的情況呢?

這裡,便是我要講到的第二種常用的進行類型檢查的方式:"constructor"屬性。

在javascript中,任何對象都有一個constructor屬性,它引用的是用來構造該對象的原始函數。

下面一段範例程式碼說明了這種方式的用法:

var num=11,str="abc",obj={num:11},arr=[1,2,3];<br />alert(num.constructor===Number);//true<br />alert(str.constructor===String);//true<br />alert(obj.constructor===Object);//true<br />alert(arr.constructor===Array);//true 

可以看到,使用constructor時,數組返回的不再是object,而是具有鮮明意義的Array。

下表展示了使用上述兩種方式對不同類型對象進行類型檢查的結果。

 

    變數                                   typeof變數                       變數.construtor

 

 

  {an:"object"}                         object                               Object

  ["an","array"]                         object                                Array

  function(){}                            function                             Function

  "a string"                                string                                 String

  55                                           number                              Number

  true                                         boolean                             Boolean

  new User()                              object                                User

 

 

這裡需要注意的是,typeof運算子返回的結果是一個字串;而constructor屬性返回的結果是一個對象

 

因此,通過上面的只是,我們可以定義自己的is_array函數來進行數組的檢查:

var is_array=function(){<br /> return value &&<br /> typeof value==='object' &&<br /> value.constructor===Array;<br />} 

這樣,便可以很好地解決了js的這個缺陷

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.