javascript中的typeof和類型判斷

來源:互聯網
上載者:User

標籤:for   number   開發   方法   efi   通用   prim   判斷   實現   

typeof

ECMAScript 有 5 種原始類型(primitive type),即 Undefined、Null、Boolean、Number 和 String。我們都知道可以使用typeof運算子求得一個變數的類型,但是對參考型別變數卻只會返回object,也就是說typeof只能正確識別基本類型值變數。

var a = "abc";console.log(typeof a); // "string"var b = 123;console.log(typeof b); // "number"var c = true;console.log(typeof c); // "boolean"var d = null;console.log(typeof d); // "object"var f = undefined;console.log(typeof f); // "undefined"var g;console.log(typeof g); // "undefined"console.log(typeof x); // "undefined"

您也許會問,為什麼 typeof 運算子對於 null 值會返回 "object"。這實際上是 JavaScript 最初實現中的一個錯誤,然後被 ECMAScript 沿用了。現在,null 被認為是對象的預留位置,從而解釋了這一矛盾,但從技術上來說,它仍然是原始值。

最後一個比較奇怪,typeof一個不存在的變數x居然返回了"object"而不是"undefined"。

我們在來如下代碼:

var a = function() { };console.log(typeof a); // "function"var b = [1,2,3]; console.log(typeof b); // "object"var c = { };console.log(typeof c); // "object"  

 

對於數組和對象都返回"object",因此我們日常開發中一個常見需求就是如何判斷變數是數組還是對象。

類型判斷

類型判斷,一般就是判斷是否是數組,是否是Null 物件。這是針對這個需求,我日常用過或見過的判斷方法

判斷是否是數組

有數組:var a = [1,2,3,4,5];

方法一:

toString.call(a); // "[object Array]"

方法二:

a instanceof Array; //true

方法三:

a.constructor == Array; //true

第一種方法比較通用,也就是Object.prototype.toString.call(a)的簡寫。

instanceof和constructor判斷的變數,必須在當前頁面聲明的,比如,一個頁面(父頁面)有一個架構,架構中引用了一個頁面(子頁面),在子頁面中聲明了一個a,並將其賦值給父頁面的一個變數,這時判斷該變數,Array == object.constructor會返回false;

var a = [1,2,3,4,5];console.log(toString.call(a)); // "[object Array]"                     console.log(a instanceof Array); //trueconsole.log(a.constructor == Array); //true

 

判斷是否是Null 物件

有變數:var obj = {};

方法一:

JSON.stringify(obj); // "{}"

通過轉換成JSON對象來判斷是否是空大括弧

方法二:

if(obj.id){ //如果屬性id存在....}

這個方法比較土,大多數人都能想到,前提是得知道對象中有某個屬性。

方法三:

function isEmptyObject(e) { var t; for (t in e) return !1; return !0 } //trueisEmptyObject(obj); //falseisEmptyObject({ "a":1, "b":2});

這個方法是jQuery的isEmptyObject()方法的實現方式。

javascript中的typeof和類型判斷

聯繫我們

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