1.typeof
优点: 可以用来检测基本数据类型,使用简单
缺点: 对复杂数据类型(不好用),对null检测时候,会检测成object
特点: 其实是根据二进制来检测的,null是JS的的0号地址,00开头的,在typeof检测的过程当中,00开头的会检测成object
返回值: 检测出来的数据类型
语法:
typeof 数据内容
typeof (数据内容) => 可以检测表达式
console.log(typeof []);
console.log(typeof {});
console.log(typeof 1);
console.log(typeof null);
console.log(typeof Function);
let a = 10;
let b = "20"
console.log(typeof (a+b));
console.log(typeof a+b);
2.instanceof
优点: 判断某一个数据的的原型链是否存在另外一个数据类型
缺点: 对复杂数据类型不好用,对undefined和null用不了
语法: A instanceof B 判断A的原型链是否存在B
返回值: boolean 存在就true 不存在就是false
function Person(name,age){
this.name = name;
this.age = age;
}
const p = new Person("张三",18);
console.log(p instanceof Person);
console.log([] instanceof Array);
console.log(p instanceof Object);
console.log(p instanceof Function);
3.constructor
作用: 用来检测原型对象指向的构造函数
语法: 原型对象.constructor()
缺点: 对undefined和null不适用
返回值: 指向的构造函数
function Person(name,age){
this.name = name;
this.age = age;
}
const p = new Person("张三",18);
console.log(Person.prototype.constructor);
console.log(Object.prototype.constructor);
console.log(Function.prototype.constructor);
console.log([].constructor);
console.log({}.constructor);
console.log(p.constructor);
4.Object.prototype.toString.call()
作用: 用来检测数据类型,功能强大,都可以检测
缺点: 单词太长了,记不住
返回值: [object 数据类型]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call(1));//[object Number]
console.log(Object.prototype.toString.call("1"));//[object String]
console.log(Object.prototype.toString.call(null));//[object String]
console.log(Object.prototype.toString.call(undefined));//[object String]
console.log(Object.prototype.toString.call((function(){})));//[object Function]