JavaScript原始型別
ECMAScript 有 5 種原始型別(primitive type),即 Undefined、Null、Boolean、Number 和 String。
typeof 運算子
typeof 運算子有一個引數,即要檢查的變數或值。例如:
var sTemp = "test string";
alert (typeof sTemp); //輸出 "string"
alert (typeof 86); //輸出 "number"
對變數或值呼叫 typeof 運算子將返回下列值之一:
-
undefined - 如果變數是 Undefined 型別的
-
boolean - 如果變數是 Boolean 型別的
-
number - 如果變數是 Number 型別的
-
string - 如果變數是 String 型別的
-
object - 如果變數是一種引用型別或 Null 型別的
註釋:您也許會問,為什麼 typeof 運算子對於 null 值會返回 "Object"。這實際上是 JavaScript 最初實現中的一個錯誤,然後被 ECMAScript 沿用了。現在,null 被認為是物件的佔位符,從而解釋了這一矛盾,但從技術上來說,它仍然是原始值。
JavaScript引用型別
對於引用型別,眾說紛紜。
從網路上總結的暫時有Object、Boolean、Number、String、Date、Array、Function。
==核心原理
知乎大佬manxisuo對於原理進行的全面解析,核心就是型別轉換。
先說轉換結果:
-
undefined == null,結果是true。且它倆與所有其他值比較的結果都是false。
-
String == Boolean,需要兩個運算元同時轉為Number。
-
String/Boolean == Number,需要String/Boolean轉為Number。
-
Object == Primitive,需要Object轉為Primitive(具體通過valueOf和toString方法)。
核心關注引用型別Object轉換原始型別(primitive type)
引用型別中的valueOf與toString方法,可以進行重寫,類似如下
var obj = {valueOf: function(){ return {} }, toString: function(){ return {}}}
console.log(obj);
console.log(obj.toString());
console.log(obj.valueOf());
console.log(typeof obj);
{valueOf: ƒ, toString: ƒ}
{}
{}
object
對於上方obj通過valueOf與toString方法後,最後獲得結果為{},而{}這個結果是無法轉換為原始型別的。
總結
知乎大佬Belleve、知乎大佬manxisuo進行了如下總結。
轉換總結
雙等比較
全等比較
完整比較
- 紅色:===
- 橙色:==
- 黃色:<= 和 >= 同時成立,== 不成立
- 藍色:只有 >=
- 綠色:只有 <=
巨人的肩膀
一張圖徹底搞懂JavaScript的==運算 - 知乎 (zhihu.com)
(79 條訊息) Javascript 中 == 和 === 區別是什麼? - 知乎 (zhihu.com)
JavaScript引用型別之Array陣列的toString()和valueof()方法的區別 - 鄭小超 - 部落格園 (cnblogs.com)
ECMAScript 原始型別 (w3school.com.cn)
ECMAScript 引用型別 (w3school.com.cn)
“一天不學習,我渾身難受” -X大力