js中类型判断总结

1.typeof

操作符返回一个字符串,表示未经计算的操作数的类型,用于除null、对象和数组,正则之外的通用类型的判断方法
typeof NaN //number
在这里插入图片描述

Object.prototype.toString.call()

原生原型扩展函数,用来精确的区分数据类型,万能
在这里插入图片描述

instanceof

该运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置,用于检测引用类型的判断方法,针对Array和RegExp DOM元素进行判断。Set Map 也可以
在这里插入图片描述

constructor

注不能用于undefined 与 null 因为它们没有构造函数
也可用于set map的判断 只要new 的都能判断
在这里插入图片描述

判断是不是对象

let obj = {}

// 1.Object.prototype.toString

if (Object.prototype.toString.call(obj) === '[Object Object]') {
    console.log('对象!')
}

// 2.constructor

if (obj.constructor === Object) {
    console.log('对象!')
}

// 3.$.type() 

if ($.type(obj) === 'object') {
    console.log('对象!')
}

// 4.$.isPlainObject() , 用于判断指定参数是否是一个纯粹的对象

if ($.isPlainObject(obj) === 'object') {
    console.log('对象!')
}

判断对象是否为空对象

let obj = {}

// 1.JSON

if (JSON.stringify(obj) === '{}') {
    console.log('空对象!')
}

// 2.Object.keys(), es6方法会返回一个由一个给定对象的自身可枚举属性组成的数组

if (Object.keys(obj).length === 0) {
    console.log('空对象!')
}

// 3.循环

for (var i in obj) { 
    return true // 不为空
}
return false // 空对象

// 4. $.isEmptyObject(), 该对象没有属性可以通过for...in迭代

if ($.isEmptyObject(obj)) {
  

判断是不是数组

let arr = []

// 1.Object.prototype.toString

if (Object.prototype.toString.call(arr) === '[object Array]') {
    console.log('数组!')
}

// 2.constructor

if (arr.constructor === Array) {
    console.log('数组!')
}

// 3.$.type() 

if ($.type(arr) === 'array') {
    console.log('数组!')
}

// 4.Array.isArray, 当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes

if (arr instanceof Array === true) {
    console.log('数组!')
}
//Array.isArray是ES 5.1推出的,不支持IE6~8。假如不存在 Array.isArray(),则在其他代码之前运行下面的代码将创建该方法
if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

// 5.instanceof

if (arr instanceof Array === true) {
    console.log('数组!')
}

判断是否为数组是否为空数组

let arr = []

// 1.length,简易版,已知为数组

if (arr && arr.length > 0) {
    console.log('不为空数组!')
} else {
    console.log('空数组!')
}

// 2.Object.prototype.isPrototypeOf,测试一个对象是否存在于另一个对象的原型链上

if (Object.prototype.isPrototypeOf(arr) && Object.keys(arr).length === 0) {
    console.log('空数组!')
}

// 3.Array.isArray,同样存在兼容问题

if (Array.isArray(arr) && arr.length === 0) {
    console.log('空数组!')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值