Jeffid

上下求索

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

4种判断方法分别是:

  1. typeof
  2. instanceof
  3. prototype属性
  4. constructor属性

可判断的类型对比如下图:

实践代码如下:

 1     // 构造函数名方法
 2 function getConstructorName(data) {
 3         return (data === undefined || data === null) ? data : (data.constructor && data.constructor.toString().match(/function\s*([^(]*)/)[1]);
 4     }
 5     
 7     //  对象原型方法
 8     //  不能判断自定义函数对象类型
 9     function getPrototypeName(data) {
10         return Object.prototype.toString.call(data).slice(8, -1);
11     }
12 
13     //    自定义的构造函数
14     function Func() {
15         this.attr = 33;
16     }
17     
18     var newObj = new Func(),
19         num = 123,
20         arr = [];
21 
22     console.group("检测自定义构造函数实例");
23     console.log(getConstructorName(newObj)); // Func
24     console.log(getPrototypeName(newObj)); // Object ;仅能识别为对象
25     console.log(newObj instanceof Func); // true
26     console.log(typeof newObj); // object ;仅能识别为对象
27     console.groupEnd();
28     
29     console.group("检测数值类");
30     console.log(getConstructorName(num)); // Number
31     console.log(getPrototypeName(num)); // Number
32 //    console.log(num instanceof Number); // 数值类不是对象不能使用该方法
33     console.log(typeof num); // number
34     console.groupEnd();
35     
36     console.group("检测数组类");
37     console.log(getConstructorName(arr)); // Array
38     console.log(getPrototypeName(arr)); // Array
39     console.log(arr instanceof Array); // true
40     console.log(typeof arr); // object ;仅能识别为对象
41     console.groupEnd();

 

posted on 2017-11-18 23:05  Jeffid  阅读(256)  评论(0编辑  收藏  举报