1.typeof只能判断基础数据类型
基础数据类型
console.log(typeof("hello"), typeof(111), typeof(true), typeof(a), typeof(null));//string number boolean undefined object
注意:typeof(null)输出的是object
引用数据类型
var obj = {name: "zhangsan",};
var arr = [1, 2, 3];
console.log(typeof(obj), typeof(arr));//object object,并不能区分开两者
2.instanceOf
instanceof运算符返回一个布尔值,表示对象是否为某个构造函数的实例
var obj = {name: "zhangsan"};
var arr = [1, 2, 3];
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true(万物皆对象)
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true
3.constructor
var obj = {name: "zhangsan"};
var arr = [1, 2, 3];
console.log(arr.constructor === Array); //true
console.log(arr.constructor === Object); //false
console.log(obj.constructor === Array); //false
console.log(obj.constructor === Object); //true
4.Object.prototype.toString.call()
Object.prototype.toString.call()方法可以精准判断变量类型,
它返回[object constructorName]的字符串格式,
这里的constructorName就是call参数的函数名
var obj = {name: "zhangsan"};
var arr = [1, 2, 3];
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(arr)); //[object Array]
if (Object.prototype.toString.call(obj) == "[object Object]") alert("我是对象");
if (Object.prototype.toString.call(arr) == "[object Array]") alert("我是数组");