標籤:相對 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中的資料類型?