JS里面会用TypeOf与InstanceOf检测数据到底是什么类型的以及是否为空
1.数据类型分为基本数据类型与复杂数据类型
基本数据类型 String、Number、Boolean、Null、Undefined、Symbol
复杂数据类型 Object、Array、Function
2.用Typeof分别对不同的数据类型进行检测下:
Undefined 声明变量但未赋值
var a;
console.log(a) // undefined
console.log(typeof a) // "undefined"
Null 声明变量赋值为空
var a = null;
console.log(a) // null
console.log(typeof a) // "object" * 空对象的引用
// 解决null比较:
var a = null
console.log(a == null) // true
console.log(a === null) // true
String 字符串类型
var a = "a";
console.log(a) // "a"
console.log(typeof a) // "string"
Number 数值类型
var a = 1;
console.log(a) // 1
console.log(typeof a) // "number"
Boolean 布尔类型
console.log(1=="1") // true
console.log(1==="1") // false
Symbol Symbol类型
var a = Symbol()
console.log(typeof a) // "symbol"
Object 对象类型
var a = {}
console.log(typeof a) // "object"
Function 函数类型
var a = function(){}
console.log(typeof a) // "function"
Array 数组类型
var a = []
console.log(typeof a) // "Object"
结论:
Typeof在检测基本数据类型的时候除了null都会返回对应的基本数据类型
Typeof检测复杂数据类型的时候除了function都会返回Object
3.用instanceof检测的是原型,a instanceof b 表示a是否为b的实例
console.log( [] instanceof Array); //true console.log( {} instanceof Object); //true console.log( new Date() instanceof Date); //true function Person() { }; console.log(new Person() instanceof Person); // true console.log([] instanceof Object); //true console.log( new Date() instanceof Object); //true console.log( new Person instanceof Object); //true
结论:
instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
Array.isArray()方法判断这个值是不是数组的。
推荐:
Object.prototype.toString.call()
由此可见,无论是typeof还是instanceof都不能准确判断出正确的类型,都需要进一步的加以判断。