變量類型分為:基礎類型和引用類型
基礎類型:boolean, string, number, null, undefined, symbol
引用類型: array, object
- typeof: 判斷變量的類型
- instanceof:判斷某個對象是否是另外一個對象的實例
主要還是理解這兩個判斷的不同之處,不能死記硬背。
首先清楚地知道變量類型,基礎類型和引用類型。
typeof:
數據類型通過typeof判斷的結果如下:
類型 | 結果 |
undefined | "undefined" |
Boolean | "boolean" |
String | "string" |
Number | "number" |
Symbol | "symbol" |
null | "object"(歷史遺留問題) |
函數對象 | "function" |
object,array,window... | "object" |
instanceof:
首先理解一句話,在js里,一切(引用類型)都是對象。
然后看下instanceof的判斷規則: A instanceof B
沿著A的__proto__這條線找,同時沿著B的prototype這條線找,如果出現同一個引用就返回true. 如果到終點還未重合就返回false
很容易理解吧。那么
var fn = function () { }; console.log(fn instanceof Object);//true
舉例子理解下Instanceof:
let s1 = new String("s"); typeof s1 === "object" //s1是String的實例化對象 s1 instanceof String // true
那再看下這個例子:
let s2 = "s"; typeof s2 === "string" s2 instanceof String //false
這里為什么是false呢?
這里就要深刻理解typeof和instanceof的通過了。
s2只是個數據類型的值,并不是String的實例化對象
?
再看下null 和 undefined的不同之處:
- null == undifined (true) ; null === undefined (false)
- ?typeof null; //object ? ? ? ? ? ? ??typeof:undefined; //undifined
- null參與計算時會自動轉換為0,undefined不會轉換
123 + null ; //123
123 + undefined; //NAN