JavaScript中判断数据类型方法总结

typeof

typeof 是一个一元运算符,放在需要判断类型的运算符前,运算符可以是任何类型,例如:

var num = 1;
console log(typeof num); //number

typeof返回一个字符串,是判断出运算符的数据类型。
typeof的返回值有boolean(布尔值),string(字符串),number(数字),object(对象或数组),function(函数),undefined(未定义)。

var num = 1;
console.log(typeof num); //number
var str = 'Diana';
console.log(typeof str); //string
var bool = false;
console.log(typeof bool); //boolean
var obj = {}, arr = [];
console.log(typeof obj, typeof arr); //object object
var fun = function () {}
console.log(typeof fun); //function
console.log(typeof ybb); //undefined

可以看到,当定义的变量是数组和对象时,typeof都会返回object,说明typeof无法判断变量是对象还是数组,这是typeof的局限性。可以通过下面要讲的 Array.isArray() 方法来解决。

可以看到在判断未定义的变量时,typeof会返回undefined,因此我们可以用

if(typeof ybb == 'undefined'){
	console.log('ybb变量未定义')
}else{
	console.log('ybb已定义')
}

来判断一个变量是否存在,而不要用 if (!ybb),这个用法在运行时会报错:
在这里插入图片描述

Array.isArray()

Array.isArray() 方法用于判断变量是否为数组,是数组返回true,不是返回false。
这个方法可以配合上面的typeof一起使用,用来判断变量是不是数组或者对象:

var obj = {}, arr = [];
console.log(typeof obj, typeof arr); //object object
console.log(Array.isArray(obj), Array.isArray(arr)); //false true

isNaN()

isNaN() 方法用于检查变量是否为可运算的数字值。不是返回ture,是则返回flase。
这里的数字值不只是number类型的数值,还包括null,布尔值,包含单个数值的数组,能用Number()方法转换为数值的字符串。

    //1.数值
    var a = 1;
    console.log(Number(a),isNaN(a)); //1 false

    //2.null
    var b = null;
    console.log(Number(b),isNaN(b)); //0 false

    //3.布尔值
    var c = false;
    console.log(Number(c),isNaN(c)); //0 false

    //4.数组
    var d1 = [1], d2 = [1,2]
    console.log(Number(d1),isNaN(d1)); //1 false
    console.log(Number(d2),isNaN(d2)); //NaN true

    //5.字符串
    var e1 = '123', e2 = '123ybb'
    console.log(Number(e1),isNaN(e1)); //123 false
    console.log(Number(e2),isNaN(e2)); //NaN true

返回 true: NaN、对象(除包含单个数值的数组)、undefined、不能用Number()方法转为数值型的字符串

返回false: 数值、null、布尔值、能用Number()方法转为数值型的字符串、包含单个数值的数组

isFinite()

isFinite() 方法用于检查参数是否在最大值与最小值之间。最大值可以用 Number.MAX_VALUE 获取,最小值可以用 Number.MIN_VALUE 获取。

console.log(Number.MAX_VALUE,Number.MIN_VALUE); //1.7976931348623157e+308 5e-324

如果参数超出这个范围,那么正数会自动转化为特殊值infinity,负数会转化为 -infinity
使用 isFinite() 检查时,在这个范围内的参数返回ture,超出范围的参数、无穷大、无穷小、NaN和其他类型参数返回flase。

console.log(isFinite(Infinity));  // false
console.log(isFinite(NaN));       // false
console.log(isFinite(-Infinity)); // false
 
console.log(isFinite(0));         // true
console.log(isFinite(2e64));      // true
console.log(isFinite("0"));       // true

instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。或者说判断一个对象是某个对象的实例。
以下案例中的每个对象都是 Object 的实例,同时也是 Person 的实例:

// 自定义构造函数
function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.sayName = function () {
    console.log(this.name);
  }
}

var person1 = new Person('zhangsan', 29, 'male');
var person2 = new Person('lisi', 19, 'female');

//instanceof 操作符的结果所示:
console.log(person1 instanceof Object); // true 
console.log(person1 instanceof Person); // true 
console.log(person2 instanceof Object); // true 
console.log(person2 instanceof Person); // true 

在这个案例中,person1 和 person2 之所以也被认为是 Object 的实例,是因为所有自定义对象都继承自 Object。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值