JavaScript判斷變數類型:typeof函數與constructor屬性異同

來源:互聯網
上載者:User

 

 

有時你可能需要對變數進行類型檢查,或者判斷變數是否已定義。有兩種方法可以使用:typeof函數與constructor屬性。

 

 

typeof函數的用法可能不用我多說,大家都知道怎麼用。而constructor屬性大家可能就陌生點。在《精通JavaScript》這本書中有提到construct的用法,但我用自己的幾個瀏覽器(IE7.0 / Firefox1.9 / Opera9.50)測試的結果卻和書上說的不一樣。但是仍然是有辦法通過constructor屬性來檢查變數類型的。

 

 

這裡先補充一下,為什麼明明有typeof函數可以很方便地用來檢測類型,還要用constructor呢?

因為typeof會把所有的數群組類型以及使用者自訂類型判斷為object,從而無法知道更確切的資訊。而constructor卻可以解決這個問題。

 

 

ok,明白了我們為什麼要用constructor,現在讓我帶大家一步步認識一下typeof和constructor用法之間的差異吧~

 

 

首先我們運行一下下面這段代碼:

1 var i;
2 alert(typeof(i));
3 alert(i.constructor);

 

這3行代碼告訴你什麼情況下可以用constructor。

你可以看到第2行返回了字串'undefined',而第三行則發生了錯誤,原因是i變數還沒有類型定義,自然也沒有constructor的存在。

從這一點上看,typeof可以檢查到變數是否有定義,而construct只能檢查已定義變數的類型

 

 

再運行一下下面這段代碼:

1 var i = 2;
2 alert(typeof(i));
3 alert(i.constructor);
4 alert(typeof(i.constructor));

 

你會看到第2行返回了字串'number’,第3行返回了一串類似函數定義的代碼字串(這就是跟《精通JavaScript》一書中介紹的不一樣的地方)。

我們再用typeof檢查一下constructor到底是個什麼樣類型的屬性,第4行返回結果'function',也就是說,實際上constructor是一個函數,更確切地說是一個建構函式。這時你就可以知道,為什麼constructor可以檢查出各種類型了。

 

 

有經驗的程式員看到這裡應該知道要怎麼利用constructor來檢查變數類型了。方法有多種,這裡提供一種比較容易理解的方法。

 

 

其實想法很簡單,就是把construcor轉化為字串,通過尋找匹配字串(function名)來確定是否指定類型。如下例子:

1 function user() {};
2 var i = new user();
3 alert((i.constructor+'').match(/user/) == null);

 

這僅僅是個簡單的例子。如果返回true則變數i不是user類型,返回false則變數是user類型。

當然,這樣檢測是不夠精確的,比如其實他是一個myuser類型的時候,同樣會被認為是user類。所以你需要書寫更精確的Regex去進行匹配。

 

可以這樣簡單改進你的Regex:

/function user\(\)/

替換上面程式碼片段中的/user/。當然,如果你的建構函式原型是user(a),那麼應該這樣書寫你的Regex:

/function user\(a\)/

 

 

到這裡你應該知道怎樣使用constructor類型去檢查變數類型了吧?

 

 

ok,最後再提個醒,如果你要用基於constructor的方法去檢查一些基本類型,如

Object / Array / Function / String / Number / Boolean

在你的Regex中,一定要將這些單詞的首字母大寫!!而如果該類型是自訂類型,則根據你定義的時候標識符的寫法確定。

 

 

 

相關文章

聯繫我們

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