JavaScript--对象-检查一个对象是否是数组

 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>

 

posted @ 2016-05-22 19:40  陈小银  阅读(269)  评论(0)    收藏  举报