在 js 中识别数据类型有四种方法
分别是: 1. typeof 2. Object.prototype.toString 3. constructor 4. instanceof
这几种方法各有优缺点
先说一下 js 中的数据类型
js 中一共有十五种类型称之为原生对象
Undefined,Null,Number,String,Boolean,Object,Function,Array,Date,RegExp,Error,Math,JSON, 全局对象, arguments
其中:
标准类型: Undefined,Null,Number,String,Boolean,Object
构造器: Object,Number,String,Boolean,Function,Arra,Date,RegExp,Error
对象: Math,JSON, 全局对象, arguments
标准内置对象: Number,String,Boolean,Object,Function,Array,Date,RegExp,Error,Math,JSON, 全局对象
一 typeof: 能识标准类型 (Null 除外), 能识别引用类型 (Function 除外)
- alert(typeof 'abc'); //string
- alert(typeof 12); //number
- alert(typeof true); //boolean
- alert(typeof undefined); //undefined
- alert(typeof null); //object
- alert(typeof { name: 1}); //object
- alert(typeof function(){}); //function
- alert(typeof []); //object
- alert(typeof new Date); //object
- alert(typeof /\d/); //object
- function Parent(){} // 自定义对象
- alert(typeof new Parent); //object
二 Object.prototype.toString: 能识别标准类型及内置对象类型但不能识别自定义类型
- function type(obj){ // 封装 Object.prototype.toString
- return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
- }
- alert(type('abc')); //string
- alert(type(123)); //number
- alert(type(true)); //boolean
- alert(type(undefined)); //undefined
- alert(type(null)); //null
- alert(type({name:1})); //object
- alert(type(function(){})); //function
- alert(type([])); //array
- alert(type(new Date)); //date
- alert(type(/\d/)); //regexp
- function Parent(){}
- alert(type(new Parent)); //object
三 constructor: 识别标准类型 (Undefined\Null 除外), 识别内置对象类型, 识别自定义对象类型
- // 判断原始类型
- console.log('abc'.constructor === String); //true
- console.log((123).constructor === Number); //true
- console.log(true.constructor === Boolean); //true
- console.log({name:1}.constructor === Object);//true
- // 判断内置对象类型
- console.log([].constructor === Array); //true
- // 判断自定义对象 (构造函数)
- function Parent(name){
- this.name = name;
- }
- console.log(new Parent('二珂').constructor === Parent); //true
四 instanceof: 判别内置对象类型, 不能判别原始类型, 判别自定义对象类型和父子类型
- // 能够判别内置对象类型
- console.log([] instanceof Array); //true
- console.log(/\d/ instanceof RegExp); //true
- // 不能判别原始对象类型
- console.log((123) instanceof Number); //false
- console.log('爱你呦' instanceof String); //false
- console.log( true instanceof Boolean); //false
- // 能够判别自定义对象类型和父子类型
- function Point(x,y){
- this.x = x;
- this.y = y;
- }
- function Circle(x,y,r){
- Point.call(this,x,y); // 将 Point 的作用域借给 Circle 使用
- this.radius = r;
- }
- Circle.prototype = new Point(); //Circle 是 Point 的子对象
- Circle.prototype.constructor = Circle;
- var c = new Circle(1, 1, 2);
- console.log(c instanceof Circle); //true
- console.log(c instanceof Point); //true
五 jQuery 中的 $.type() 方法;
来源: https://www.cnblogs.com/tanhuidong/p/9103812.html