JavaScript的類型 原始類型: number string boolean null undefined 對象類型: Object function Array Date ... 隱式轉換 運算 "37" + 7 = "377" "37" 7 = 30 運算 以下為true: "1.23" ...
JavaScript的類型
原始類型:
- number
- string
- boolean
- null
- undefined
對象類型:
- Object
- function
- Array
- Date
- ...
隱式轉換
+/-
運算
- "37" + 7 = "377"
- "37" - 7 = 30
==
運算
以下為true:
- "1.23" == 1.23
- 0 == false
- null == undefined
比較運算
===
嚴格等於
- 類型不同,返回false
- 類型相同,以下為true:
- null === null
- undefine === null
- NaN != NaN
- new Object != new Obejct
==
等於
- 類型相同,同
===
- 類型不同,嘗試類型轉換比較
- null == undefined
- number == string 轉number
- boolean == ? 轉number
- Object == number | string 嘗試對象轉換為基本類型
- 其他:false
包裝類型
為了便於操作基本類型值,Js提供了基本類型的自動包裝功能,每單讀取一個基本類型值的時候,後臺就會創建一個對應的基本包裝類型的對象,併在調用後自動銷毀。
由於基本包裝類型和基本類型的含義並不一樣,會導致typeof等操作產生不同的結果,不推薦顯示實例化基本數據類型
var a = "string";
alert(a.length); //6
a.t = 3;
alert(a.t); //undefined
類型檢測
typeof
以下為true:
typeof 100 === “number”
typeof true === “boolean”
typeof function () {} === “function”
typeof(undefined) ) === “undefined”
typeof(new Object() ) === “object”
typeof( [1, 2] ) === “object”
typeof(NaN ) === “number” //NaN也為number
typeof(null) === “object”
instanceof
obj instanceof Object
利用原型鏈進行判斷,適用於對象間判斷。它期望左邊是一對象,右邊是函數對象或函數構造器。
以下為true:
[1, 2] instanceof Array === true
new Object() instanceof Array === false
Object.prototype.toString.apply()
Object.prototype.toString.apply([]); === “[object Array]”;
Object.prototype.toString.apply(function(){}); === “[object Function]”;
Object.prototype.toString.apply(null); === “[object Null]”
Object.prototype.toString.apply(undefined); === “[object Undefined]”
// IE6/7/8 Object.prototype.toString.apply(null) 返回”[object Object]”
小結
typeof
適合基本類型及function檢測,遇到null失效。[[Class]]
通過{}.toString拿到,適合內置對象和基元類型,遇到null和undefined失效(IE678等返回[object Object])。instanceof
適合自定義對象,也可以用來檢測原生對象,在不同iframe和window間檢測時失效。