数据类型检测的四种方式

/*typeof:检测数据类型的运算符
返回的都是一个字符串
类型:number string boolean undefined function object*/
console.log(typeof 12);
console.log(typeof "14");
console.log(typeof undefined);
console.log(typeof function text(){});
console.log(typeof null);//空对象指针
/*instanceof:检测实例是否属于某一个类
只要在原型链上,结果都为true
局限性:原型链*/
console.log(1 instanceof Number);//f
console.log(new Number(1) instanceof Number);//t

/*constructor:构造函数
基本数据类型的可以检测
局限性:原型如果被重写,检测的结果很不准确*/
var num=1;
console.log(num.constructor==Number);
function Fn(){

}
Fn.prototype=new Array();
//Fn.prototype.constructor=Fn;
var f=new Fn();
console.log(f.constructor);
console.log(Object.prototype.toString.call(f.constructor));
console.log('---------');
/*null undefined他们所属类是Null和Undefined*/
/*Object:函数数据类型(in hasPrototyOf)
最准确的检测方式*/
//toString专题
//Object.prototype.toString();
console.log(typeof (1).toString());
//Number.prototype.toString 字符串
console.log((1).__proto__.__proto__.toString());
console.log(Object.prototype.toString.call(1));
console.log({}.toString.call(1));
//Object.prototype.toString => [object Object]
//Math,Object的toString当前方法的执行主体(this)所属类的执行信息=>[object Object] [object Math]
var obj={name:'qiqi'};
console.log(obj.toString());
/*[object Object] 第一个object是当前实例是对象数据类型的,第二个Object是obj所属类是Object*/
console.log(Math.toString());//=>"[object Math]";

原文地址:https://www.cnblogs.com/qiqi105/p/8297894.html