var obj1={};
var obj2=[1,2,3];
var obj3=function(){};
var obj4={}; obj4.__proto__=[];
1、isPrototypeOf 不但检查直接父对象,而且检查整个原型链
console.log(Array.prototype.isPrototypeOf(obj1));//f
console.log(Array.prototype.isPrototypeOf(obj2));//t
console.log(Array.prototype.isPrototypeOf(obj3));//t
console.log(Array.prototype.isPrototypeOf(obj4));//t
2、instanceof 可检查整个原型链 判断是不是构造函数的实例
console.log(obj1 instanceof Array);
console.log(obj2 instanceof Array);
console.log(obj3 instanceof Array);
console.log(obj4 instanceof Array);
3、constructor 可检查整个原型链
console.log(obj1.constructor==Array);
console.log(obj2.constructor==Array);
console.log(obj3.constructor==Array);
console.log(obj4.constructor==Array);
4、调用原生toString()方法访问对象内部的class属性
call(替代this对象) call做2件事1、执行函数2、替换this
此方法判断对象是不是数组是用的最多的也是最严格的
class值记录创建时的类型
console.log(Object.prototype.toString.call(obj1)=="[object Array]");
console.log(Object.prototype.toString.call(obj2)=="[object Array]");
console.log(Object.prototype.toString.call(obj3)=="[object Array]");
console.log(Object.prototype.toString.call(obj4)=="[object Array]");
/**
* Returns internal [[Class]] property of an object
*
* Ecma-262, 15.2.4.2
* Object.prototype.toString( )
*
* When the toString method is called, the following steps are taken:
* 1. Get the [[Class]] property of this object.
* 2. Compute a string value by concatenating the three strings "[object ", Result (1), and "]".
* 3. Return Result (2).
*/
function __getClass(object){
return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
};
var ary = new Array();
var x = __getClass(ary);
//var reg=/[0-9]{1}/;
//var x = __getClass(reg);//RegExp
console.log(x);
5、Array.isArray(obj)方法 ECMA5新标准 旧的浏览器不支持的话就添加
console.log(Array.isArray(obj1));
console.log(Array.isArray(obj2));
console.log(Array.isArray(obj3));
console.log(Array.isArray(obj4));