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>