一、typeof 是一个一元运算符。检测数据类型,返回一个字符串,包含数据类型信息。例如:“number,string,undefined”
局限性:
1、typeof null ===》 “object”
2、typeof [] ===> "object"
不能具体检测对象数据类型的细分项(数组、正则...)
二、instanceof 检测某一个实例是否属于这个类
var ary = [1,2,3,4];
ary instanceof Array //如果true,说明ary是Array的一个实例,也就ary是一个数组。反之,返回false则不是一个数组。
ary.constructor == Array //通过constructor
局限性:
在关于类之间通过原型链的方式实现继承的时候,我们instanceof检测出来的结果不准确。例如:下面的代码:
function Fn(){}
Fn.prototype = new Array; //Fn继承Array类
var f = new Fn();
console.log(f instanceof Array); //true
console.log(f.constructor); //Array
三、toString检测数据类型的原理:执行Object原型上的toString,让这个方法中的this变为我们要检测的那个值,就是实现数据类型的检测
//toString检测数据类型的原理:执行Object原型上的toString方法,让这个方法中的this变为我们要检测的那个值,就是实现了我们的数据类型检测
// Object.prototype.toString = function () {
// return "[object "+this.constructor+"]";
// }
var num = 1;
console.log(Object.prototype.toString.call(num));
console.log({}.toString.call([]));