JavaScript 数据类型详解(3)

obj instanceof Object(obj:必须是对象,如果是基本类型,直接会返回false;  Object:必须是函数对象,或者函数构造器,如果不是,就会抛出TypeError异常。)

看下简单的例子

new Object() instanceof Array === false //true [1, 2] instanceof Array === true //true [] instanceof Array===true//true

我们知道,任何一个构造函数,都有一个prototype对象属性,这个对象属性将用作使用new构造函数这种方式构造出的对象的原型。比如Person这个函数,函数有prototype属性. 我们用new Person()去创建Person实例的时候,这个对象实例就会有一个原型指向Person.prototype这个对象。我们用var bosn=new Student(),创建一个Student实例bosn,bosn的原型会指向它的构造器Student的prototype对象属性。检测bosn instanceof Person时,bosn.__proto__=Student.prototype,然后原型链会继续往上查找,bosn.__proto__.__proto__=person.prototype.就会返回true。注意,不同window或iframe间的对象类型检测不能使用instanceof!

JavaScript 数据类型详解

3,Object.prototype.toString()判断类型,适合内置对象和基本类型,遇到null和undefined失效,IE6/IE7/IE8返回'[object Object]'

Object.prototype.toString.apply([]);==='[object Array]'; Object.prototype.toString.apply(function(){});==='[object Function]'; Object.prototype.toString.apply(null);==='[object Null]';//IE6/IE7/IE8返回'[object Object]' Object.prototype.toString.apply(undefined);==='[object Undefined]';//IE6/IE7/IE8返回'[object Object]' Object.prototype.toString.apply('123');==="[object String]"; Object.prototype.toString.apply(123);==="[object Number]"; Object.prototype.toString.apply(true);==="[object Boolean]"; Object.prototype.toString.apply(String);==="[object Function]"; Object.prototype.toString.apply(Boolean);==="[object Function]"

4,constructor检测类型

任何一个对象都有一个constructor属性,继承自原型,会执向构造这个对象的构造函数, constructor可以被改写,使用时要小心。

5,duck type检测类型

比如我们不知道一个对象是否是数组,我们可以判断这个对象的length是否是数字,是否有join,push等数组的函数方法,通过特征判断对象是否属于某些类型,有时也会用到。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwwgpx.html