1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script> 7 //鄙视题: 判断一个对象是否是数组,有几种办法: 8 var obj1={};//Object 9 var obj2=[1,2,3];//Array 10 var obj3=function(){};//Function 11 var obj4={}; obj4.__proto__=[]; 12 //obj4认[]当爹 13 /*否定: typeof 无法区分数组和对象 14 console.log(typeof obj1);//object 15 console.log(typeof obj2);//object 16 console.log(typeof obj3);//function 17 */ 18 //1. isPrototypeOf 不但检查直接父对象,而且检查整个原型链 19 console.log(Array.prototype.isPrototypeOf(obj1)); 20 console.log(Array.prototype.isPrototypeOf(obj2)); 21 console.log(Array.prototype.isPrototypeOf(obj3)); 22 console.log(Array.prototype.isPrototypeOf(obj4)); 23 24 //2. constructor 也可检查整个原型链 25 console.log(obj1.constructor==Array); 26 console.log(obj2.constructor==Array); 27 console.log(obj3.constructor==Array); 28 console.log(obj4.constructor==Array); 29 30 //3. instanceof 也可检查整个原型链 31 //判断一个对象是否是指定构造函数的实例 32 console.log(obj1 instanceof Array); 33 console.log(obj2 instanceof Array); 34 console.log(obj3 instanceof Array); 35 console.log(obj4 instanceof Array); 36 37 /*4. 每个对象内部都有一个属性: class 38 记录了创建对象时使用的类型名 39 如何访问对象内部的class: 40 只能调用原生的toString方法 41 Object.prototype.toString(); 42 "[object Object]" 43 对象 class 44 强行调用原生toString: 45 原生toString.call(替代this的对象) 46 call做2件事: 1. 执行函数;2. 替换this! 47 Object.prototype.toString() 48 this->Object.prototype 49 Object.prototype.toString.call(obj1) 50 this->obj1 51 ->在执行时,相当于obj1.toString()*/ 52 53 console.log( 54 Object.prototype.toString.call(obj1) 55 =="[object Array]");//原生的 56 console.log( 57 Object.prototype.toString.call(obj2) 58 =="[object Array]"); 59 console.log( 60 Object.prototype.toString.call(obj3) 61 =="[object Array]"); 62 console.log( 63 Object.prototype.toString.call(obj4) 64 =="[object Array]"); 65 66 /*5. ES5: isArray*/ 67 //如果浏览器不支持isArray方法 68 //就在?添加isArray方法 69 //参数: obj要检查的对象 70 //函数体: 71 //1. 强行调用原生toString方法输出obj的class属性//2. 如果返回的结果是"[object Array]"才返回true 72 //否则返回false 73 74 document.write(Array.isArray(obj1)+"<br>"); 75 document.write(Array.isArray(obj2)+"<br>"); 76 document.write(Array.isArray(obj3)+"<br>"); 77 document.write(Array.isArray(obj4)+"<br>"); 78 </script> 79 </head> 80 <body> 81 82 </body> 83 </html>