4种判断方法分别是:
- typeof
- instanceof
- prototype属性
- 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();