一、型检typeof 主要用于判断基本数据类型 。型检使用方式:typeof(表达式)和typeof 变量名,型检第一种是型检对表达式做运算,第二种是型检对变量做运算。 typeof运算符的型检返回类型为字符串,值包括如下几种: 示例如下: console.log(typeof a); //undefined console.log(typeof(true)); //boolean console.log(typeof 123); //string console.log(typeof 123); //number console.log(typeof NaN); //number console.log(typeof null); //object var obj = new String(); console.log(typeof(obj)); //object var fn = function(){ }; console.log(typeof(fn)); //function typeof的不足之处: typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回object,有时我们需要判断该实例是否为某个对象的实例,那么这个时候需要用到instanceof运算符。 用于引用数据类型的判断。所有引用数据类型的值都是Object的实例。目的是判断一个对象在其原型链上是否存在构造函数的prototype属性。 用法: 示例如下: // example var arr = []; 由于: 1. arr.constructor === Array 2. arr.__proto__ === Array.prototype 3. arr.__poto__.proto__ === Object.prototype 所以, 以下都返回true 1. arr instanceof arr.constructor(Array) 2. arr instanceof arr.__proto__.constructor(Array) 3. arr instanceof arr.__proto__.__poto__.constructor(Object) 如果你了解原型链的话,你很快就会得出一些结论: 1. 所有对象 instanceof Object 都会返回 true 总结: instanceof不仅能检测构造对象的构造器,还检测原型链。instanceof要求前面是个对象,后面是云服务器一个构造函数。而且返回的是布尔型的,不是true就是false。 Array.isArray()可以用于判断数组类型,支持的浏览器有IE9+、FireFox 4+、Safari 5+、Chrome; 兼容实现: if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === [object Array]; }; 示例如下: // 1. Array.isArray([1, 2, 3, 4]); // --> true // 2. var obj = { a: 1, b: 2 }; Array.isArray(obj); // --> false // 3. Array.isArray(new Array); // --> true //4. isArray是一个静态方法,使用Array对象(类)调用,而不是数组对象实例。其中Array.prototype 也是一个数组,Array.isArray 优于 instanceof。 判断某个对象值属于哪种内置类型, 最靠谱的做法就是通过Object.prototype.toString方法。object.prototype.toString()输出的格式就是[object 对象数据类型]。 示例如下: console.log(Object.prototype.toString.call("jerry"));//[object String] console.log(Object.prototype.toString.call(12));//[object Number] console.log(Object.prototype.toString.call(true));//[object Boolean] console.log(Object.prototype.toString.call(undefined));//[object Undefined] console.log(Object.prototype.toString.call(null));//[object Null] console.log(Object.prototype.toString.call({ name: "jerry"}));//[object Object] console.log(Object.prototype.toString.call(function(){ }));//[object Function] console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(new Date));//[object Date] console.log(Object.prototype.toString.call(/\d/));//[object RegExp] function Person(){ };