javascript typeof資料類型檢測函數

來源:互聯網
上載者:User

網頁特效 typeof資料類型檢測函數

Javascript是一種弱類型指令碼語言,弱類型並不代表沒有類型。和其他的程式設計語言一樣,Javascript中的資料也是有類型的,大的可以分為簡單類型與複雜類型。


簡單類型有 number,string,boolean

複雜類型有object和 function

下邊的例子可以說明:

typeof 1 //echo "number"
typeof 1.1 //echo "number"
typeof "hello" //echo "string"
typeof true //echo "boolean"
 
typeof new Object() // echo "object"
typeof new Date() //echo "object"
typeof new Array() //echo "object"

typeof new Function() //echo "function"
typeof Object //echo "function"
typeof Date //echo "function"
typeof Array //echo "function"
typeof Function //echo "function"

上邊的代碼我們大致可以看出,使用typeof函數可以得出的Javascript資料類型有哪些,複雜類型只有object和function,而簡單類型也只有三種。其實這並不準確,不論複雜類型還是簡單類型,使用typeof得出的都不完全,下邊我們將詳細點描述。

對於簡單類型,”number”可以分為integer和float兩種,這兩種類型在計算乘除的時候,是不一樣的,這句有點廢話,其實我想說的是,float類型在和int類型計算的時候,會有許多莫名奇妙的問題,就是因為float的精度問題。而對於複雜類型,就相對複雜些,javascript內建的一些類型從上邊的例子我們可以看到,常見的有Date,Object,Array,Function(應該還有其他的吧,寫這個的時候我想不起來),雖然他們使用typeof 計算時,返回的只有object換個function兩種,但是他們其實是不一樣的,如何不一樣,就無需贅述。但是由上邊的例子我們也可以看出,object和function兩種類型比較特殊,我將他們其稱之為基礎類型。有個簡單的區分方法,通常由new建立的都是object類型,通過function關鍵自訂的都是function類型,但是還有例外,就是new Function,它所建立的就是一個function,這個可能會在以後將函數的定義時提到吧。object類型,大致都能差不多理解,容易讓人疑惑的是function類型,作為一種類型來描述時,其實應該描述為大寫Function。Function本身的類型就是Function,由Function類型建立(包括使用function關鍵字定義)出來的function(函數)類型也是Function。這句話需要仔細理解。但是,還有一點,定義的function也是可以執行個體化的(這個詞用這兒可能不太合適,不過便於理解),如下所示:

function functionType()
{
    //echo I am a function
}
var func = new functionType();
我們分別再使用typeof來檢查functionType和func的類型:

typeof functionType // echo "function"
typeof func // echo "object"
再揣摩上邊的話,定義的function的類型也是Function,定義的function同樣可以被用於執行個體化,就像系統內建的Date,Array等類型一樣,這說明了自訂的function是可以被當做類型使用的,這就找到了一條自訂類型的路,在物件導向的語言中,我們稱之為類。現在在Javascript,我們也有定義類方法,即定義function。同時,類也是對象,類對象的類型是Function。

以上可以看出,Javascript中的複雜類型其實由Date,Array,Object,Function,以及我們自訂的類(型)。

既然存在類型,我們就需要區分類型,我們上邊說了,typeof不能準確區分,因此,我們引入另一個關鍵字instanceof,並不是函數,但是它會返回一個boolean類型的值,標明一個對象是否為另一個對象的執行個體。如下


typeof new Date() instanceof Date //echo true
typeof new Array() instanceof Array //echo true
typeof new Object() instanceof Object //echo true

function myType(){
    // this is my type
}
var instance  = new myType();
instance instanceof myType() //echo true
myType instanceof Function //echo true
new Date() instanceof myType() // echo false

我們可以看出,instanceof是用來檢查一個對象是否為另一個對象的執行個體的。細心的朋友可能還會這樣嘗試:

Function instanceof Function //echo true
Function instanceof Object //echo true
Object instanceof Object //echo true
Object instanceof Function //true
老實說,這段代碼很讓人抓狂。我在前邊也說過,Object和Function都為基礎類型,我們前邊也看到使用typeof時他們兩個之間的關係,typeof Object結果為function,我個人認為,這說明了Javascript中所有複雜類型的基礎的都是Function,換句話說所有的類型都是基於Function來實現的。另一方面任何對象使用instanceof Object結果都為true,說明了任何對象都是Object的執行個體。前邊一句側重於類型,後邊側重於執行個體(Function我們也可以認為它是自己的一個執行個體)。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.