- //1.使用typeof..
- //无需封装直接使用.
- //可以识别标志类型(null除外)
- //不可识别具体的对象类型
- typeof(1);//"number"
- typeof("");//"string"
- typeof([]);//"object"
- typeof({});//"object"
- typeof(null);//"object"
- typeof(undefined);//"undefined"
- //2.instanceof
- //无须封装使用
- //能够判别内置对象类型
- [] instanceof Array;//true
- /\d/ instanceof RegExp;//true
- //不能判别原始类型
- 1 instanceof Number;//false
- "xiaohong" instanceof String;//false
- //能够判别自定义类型
- function Point(x, y) {
- this.x = x;
- this.y = y;
- }
- var c = new Point(2,3);
- c instanceof Point;//true
- //3.Object.prototype.toString.call()方法.
- Object.prototype.toString.call(21);//"[object Number]"
- Object.prototype.toString.call([]);//"[object Array]"
- //为了方便使用一般都是使用函数封装如下
- function typePrototype(obj) {
- return Object.prototype.toString.call(obj).slice(8,-1);
- }
- typePrototype("guo");//"String"
- typePrototype({});//"Object"
- //可以识别标准类型,及内置对象类型
- //不能识别自定义类型
- //4.constuructor指向构造这个对象的构造函数本身..
- //可判别原始类型
- "guo".constructor === String;//true
- (1).constructor === Number;//true
- true.constructor === Boolean;//true
- ({}).constructor === Object;//true
- //可判别内置对象类型
- new Date().constructor === Date;//true
- [].constructor === Array;//true
- //可识别自定义类型
- function People(x, y) {
- this.x = x;
- this.y = y;
- }
- var c = new People(2,3);
- c.constructor===People;//true
- //函数封装如下
- function getConstructorName(obj){
- return obj && obj.constructor && obj.constructor.toString().match(/function\s*([^(]*)/)[1];
- }
- //利用&&短路特性
- //1 obj//如果入参是undefined和null时能够直接返回,因为其没有constructor值
- //2 obj.constructor//保证后面的表达式能够正确被执行
- //3 obj.constructor.toString()//把构造函数转化为字符串"function Number(){}"
- //4 .match(/function\s*([^(]*)/)[1]//获取构造函数字符串中有类型的值"Number"
- getConstructorName(new Date());//"Date"
- getConstructorName(null);//null
- getConstructorName(12);//"Number"
时间: 2024-08-04 18:21:57