JavaScript数据类型的判断

判断JS数据类型的方法有:typeof,instanceof,constructor,prototype,$.type()/jquery.type().

1.typeof

typeof最常见的数据类型判断方法,使用方式:typeof 变量

//判断基本数据类型
var a;
console.log(typeof a);      //undefined
var b = null;
console.log(typeof b);      //object,这里比较特殊,js用null来表示空引用,这个之后再说
var c = 2;
console.log(typeof c);      //number
var d = 'abcdef';
console.log(typeof d);      //string
var e = true;
console.log(typeof e);      //boolean

//判断复杂数据类型
var obj = {
    name:'Jack',
    age:10
};
console.log(typeof obj);        //object
var arr = [1,2,3];
console.log(typeof arr);        //object
function fun(){
    alert(1);
}
console.log(typeof fun);        //function
var nowdate = new Date();
console.log(typeof nowdate);    //object

通过上面我们可以很明显看到,typeof用来判断基本数据类型很方便,但是判断复杂数据类型除了Function类型,其他都是返回object,所以typeof不适用来判断复杂类型,判断不出具体类型。

2.instanceof

在我们已知为对象类型时,我们使用该方法就可以判断出它的具体类型,使用方式:变量 instanceof 具体类型

var obj = {
    name:'Jack',
    age:10
};
console.log(obj instanceof Object);     //true
var arr = [1,2,3];
console.log(arr instanceof Array);      //true
function fun(){
    alert(1);
}
console.log(fun instanceof Function);       //true
var nowdate = new Date();
console.log(nowdate instanceof Date);       //true
3.constructor

constructor是对象的一个属性,返回对创建此对象的数组函数的引用。使用方法:变量.constructor

//这里null和undefined没有此属性
var a = 12;
console.log(a.constructor);     //function Number(){}
console.log(a.constructor === Number);      //true
var b = 'abcd';
console.log(b.constructor);     //function String(){}
console.log(b.constructor === String);      //true
var c = true;
console.log(c.constructor);     //function Boolean(){}
console.log(c.constructor === Boolean);     //true
var d = {name:'Jack'};
console.log(d.constructor);     //function Object(){}
console.log(d.constructor === Object);      //true
var e = [1,2,3];
console.log(e.constructor);     //function Array(){}
console.log(e.constructor === Array);       //true
var f = new Date();
console.log(f.constructor);     //function Date(){}
console.log(f.constructor === Date);        //true
function fun(){
    console.log(123);
}
console.log(fun.constructor);       //function Function(){}
console.log(fun.constructor === Function);      //true
4.prototype

prototype是对象的一个属性,该属性可以向对象添加属性和方法。(后面单独详解prototype属性)。使用方法:Object.prototype.toString.call( 变量 )

var a;
console.log(Object.prototype.toString.call(a));     //[object Undefined]
console.log(Object.prototype.toString.call(a) === '[object Undefined]');        //true
var b = null;
console.log(Object.prototype.toString.call(b));     //[object Null]
console.log(Object.prototype.toString.call(b) === '[object Null]');     //true
var c = 2;
console.log(Object.prototype.toString.call(c));     //[object Number]
console.log(Object.prototype.toString.call(c) === '[object Number]');       //true
var d = 'abcdef';
console.log(Object.prototype.toString.call(d));     //[object String]
console.log(Object.prototype.toString.call(d) === '[object String]');       //true
var e = true;
console.log(Object.prototype.toString.call(e));     //[object Boolean]
console.log(Object.prototype.toString.call(e) === '[object Boolean]');      //true
var obj = {
    name:'Jack',
    age:10
};
console.log(Object.prototype.toString.call(obj));       //[object Object]
console.log(Object.prototype.toString.call(obj) === '[object Object]');     //true
var arr = [1,2,3];
console.log(Object.prototype.toString.call(arr));       //[object Array]
console.log(Object.prototype.toString.call(arr) === '[object Array]');      //true
function fun(){
    alert(1);
}
console.log(Object.prototype.toString.call(fun));       //[object Function]
console.log(Object.prototype.toString.call(fun) === '[object Function]');       //true
var nowdate = new Date();
console.log(Object.prototype.toString.call(nowdate));       //[object Date]
console.log(Object.prototype.toString.call(nowdate) === '[object Date]');       //true
5.$.type()/jquery.type()/jQuery.type

$.type() 函数用于确定JavaScript内置对象的类型,并返回小写形式的类型名称,是jQuery中的方法,这个方法比较好用,但是需要引入jQuery文件。使用方法:jQuery.type( 变量 )

//判断一个未声明的
console.log(jQuery.type(test) === 'undefined');     //false
var a;
console.log(jQuery.type(a));        //undefined
console.log(jQuery.type(a) === 'undefined');        //true
var b = null;
console.log(jQuery.type(b));        //null
console.log(jQuery.type(b) === 'null');     //true
var c = 2;
console.log(jQuery.type(c));        //number
console.log(jQuery.type(c) === 'number');       //true
var d = 'abcdef';
console.log(jQuery.type(d));        //string
console.log(jQuery.type(d) === 'string');       //true
var e = true;
console.log(jQuery.type(e));        //boolean
console.log(jQuery.type(e) === 'boolean');      //true
var obj = {
    name:'Jack',
    age:10
};
console.log(jQuery.type(obj));      //object
console.log(jQuery.type(obj) === 'object');     //true
var arr = [1,2,3];
console.log(jQuery.type(arr));      //array
console.log(jQuery.type(arr) === 'array');      //true
function fun(){
    alert(1);
}
console.log(jQuery.type(fun));      //function
console.log(jQuery.type(fun) === 'function');       //true
var nowdate = new Date();
console.log(jQuery.type(nowdate));      //date
console.log(jQuery.type(nowdate) === 'date');       //true

以上就是可以用来判断JavaScript数据类型的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值