变量类型分为:基础类型和引用类型
基础类型: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