如何判斷js中的資料類型?

來源:互聯網
上載者:User

標籤:相對   cell   方便   聲明   解釋   tab   auto   如何   str   

js六大資料類型:number、string、object、Boolean、null、undefined

string: 由單引號或雙引號來說明,如"string"
number: 什麼整數啊浮點數啊都叫數字,你懂的~
Boolean:  就是true和false啦
undefined: 未定義,就是你建立一個變數後卻沒給它賦值~
null:  故名思久,null就是沒有,什麼也不表示
object: 這個我也很難解釋的說。就是除了上面五種之外的類型

 

 

 

 

 

 

 

如何判斷js中的資料類型:typeof、instanceof、 constructor、 prototype方法比較

一、常見的判斷方法:typeof(typeof可以解決大部分的資料類型判斷,是一個一元運算,放在一個運算值之前,其傳回值為一個字串,該字串說明運算數的類型,所以判斷某個是否為String類型,可以直接 alert(typeof(你的值) == "string"){})

例如:

alert(typeof a == "string") -------------> true

alert(typeof a == String) ---------------> false

另外typeof 可以判斷function的類型;在判斷除Object類型的對象時比較方便。

二、判斷已知物件類型的方法: instanceof(instance,故名思義,執行個體,例子,所以instanceof 用於判斷一個變數是否某個對象的執行個體,是一個三目運算式---和typeof最實質上的區別a instanceof b?alert("true"):alert("false")  //注意b值是你想要判斷的那種資料類型,不是一個字串,比如Array)

alert(c instanceof Array) ---------------> true

alert(d instanceof Date)

alert(f instanceof Function) ------------> true

alert(f instanceof function) ------------> false

注意:instanceof 後面一定要是物件類型,並且大小寫不能錯,該方法適合一些條件選擇或分支。

三、根據對象的constructor判斷: constructor(在W3C定義中的定義:constructor 屬性返回對建立此對象的數組函數的引用就是返回對象相對應的建構函式。從定義上來說跟instanceof不太一致,但效果都是一樣的)

alert(c.constructor === Array) ----------> true

alert(d.constructor === Date) -----------> true

alert(e.constructor === Function) -------> true

注意: constructor 在類繼承時會出錯

eg,

      function A(){};

      function B(){};

      A.prototype = new B(); //A繼承自B

      var aObj = new A();

      alert(aobj.constructor === B) -----------> true;

      alert(aobj.constructor === A) -----------> false;

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

      alert(aobj instanceof B) ----------------> true;

      alert(aobj instanceof B) ----------------> true;

言歸正傳,解決construtor的問題通常是讓對象的constructor手動指向自己:

      aobj.constructor = A; //將自己的類賦值給對象的constructor屬性

      alert(aobj.constructor === A) -----------> true;

      alert(aobj.constructor === B) -----------> false; //基類不會報true了;

!!注意:

使用instaceof和construcor,被判斷的array必須是在當前頁面聲明的!比如,一個頁面(父頁面)有一個架構,架構中引用了一個頁面(子頁面),在子頁面中聲明了一個array,並將其賦值給父頁面的一個變數,這時判斷該變數,Array == object.constructor;會返回false;
原因:
1、array屬於引用型資料,在傳遞過程中,僅僅是引用地址的傳遞。
2、每個頁面的Array原生對象所引用的地址是不一樣的,在子頁面聲明的array,所對應的建構函式,是子頁面的Array對象;父頁面來進行判斷,使用的Array並不等於子頁面的Array;切記,不然很難跟蹤問題!

四、通用但很繁瑣的方法: prototype

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;

 

如何判斷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.