您的位置:首页 > Web前端 > JavaScript

javascript的typeof与instanceof

2015-11-23 13:01 309 查看
typeof 是用来判断数据对象的数据类型, 而instanceof是用来判断实例类型的.

数据类型--数据对象的类型,在javascript中有6种数据对象的类型: number string boolean undefined object function其中number string boolean,undefined 是值类型, object function 引用类型,引用类型的数据对象可以添加属性对象.
我们判断一个对象的类型时,用 typeof 对象; 注意 (typeof null) == object;

实例类型--用来描述实例对象与类对象的关系,实例对象的实例类型是其对应的类对象,可以按原型链向上查找.
比如说: var obj = new Object();Object是个类对象,obj是个实例对象,obj的实例类型是Object. obj instanceof Object 为true;
实例类型的判断其实跟原型链有关, a.__proto__ = B.prototype; ;那么a的实例类型就是B,也就是说instanceof 检测的是prototype属性

a instanceof b的结果就是return a.__proto__ === B.prototype

请注意区别 数据类型 和 实例类型 的概念,对象都有数据类型,不一定有实例类型,只有实例对象才有实例类型,
请注意:object,Object()和我们说的对象意义的不同,很多书object,Object()都翻译成对象,这是不正确的,其实,它们的涵义是不一样的.object指的是数据类型,如果一个对象是引用类型数据对象,那么它的数据类型是object. 而Object()指的是有一个函数对象,它的标识符是Object,那么Object这个对象的数据类型是function.而我们说的对象,记得吧,一切都是对象.同理要区别function 与 Function();function 是指数据类型,函数对象的类型就是function,也就是说Function()的数据类型是function.但Function()指的是有个函数对象,其标识符为Function,有意思的是:Function()是所有函数对象的实例类型,因为所有用function声明的数据对象的__proto__都默认指向Function.prototype
那么我们来举例进一步说明:

var obj = new Object();
console.log(typeof Object === "object");//F
console.log(typeof obj === "function");//F
console.log(typeof obj === "object");//T
console.log(typeof Object === "function");//T
console.log( obj instanceof Object);//T
console.log( Object instanceof Object);//T
console.log( Object instanceof Function);//T
console.log( Function instanceof Function);//T
console.log( Function instanceof Object);//T
console.log(Function.__proto__ === Function.prototype );//T
console.log(Function.prototype.__proto__===Object.prototype );//T
console.log(Function.__proto__.constructor === Function );//T
console.log(Object.__proto__ === Function.prototype);//T
console.log(Object.__proto__.constructor === Function);//T
console.log(Function.prototype.constructor===Function );//T
console.log(Object.prototype.constructor===Object );//T

输出结果为:前两个是false,其它是true.
可能你会对后面的一些Function和Object的关系觉得有点绕,那么请看我的另两篇文章:javascript中的Function(函数)与Object(对象)和javascript中的__proto__和prototype
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: