JavaScript如何判断空对象

for in 循环判断

function isNullObj(obj) {
    for (const key in obj) {
        if (obj.hasOwnProperty(key)) return false
    }
    return true
}

这里注意for…infor…of遍历的区别:
for…in:
for…in 语句以任意顺序迭代一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。引入enumerable的最初目的,就是让某些属性可以规避掉for…in操作。比如,对象原型的toString方法,以及数组的length属性,就通过这种手段,不会被for…in遍历到。
js 中的基本包装类型的原型属性是不可枚举的,如Object,Array,Number等

  • 可枚举属性决定了这个属性能否被for…in遍历到
  • 遍历得到的是String类型的键名
  • 原型链上的属性都能被访问到
  • for-in 这个代码是为普通对象设计的,不适用于数组的遍历

for…of:
for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments,DOM数组对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

  • for…of 语句遍历出来的是值
  • 可以保证遍历顺序

区别:

  • 推荐在遍历对象的时候使用for in ,在遍历数组的时候使用for of 。
  • for…of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句
  • for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法

Object.key()

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

const obj1 = {}
const obj2 = {
    key1: 'a',
    key2: 'b',
}
Object.prototype.key1 = 'c'

/* 1.Object的api */
// Object.keys()
console.log(Object.keys(obj1).length);
console.log(Object.keys(obj2).length);

// Object.entries()
console.log(Object.entries(obj1).length);
console.log(Object.entries(obj2).length);

// Object.getOwnPropertyNames()
console.log(Object.getOwnPropertyNames(obj1).length);
console.log(Object.getOwnPropertyNames(obj2).length);

JSON.stringify()

通过JSON.stringify,序列化对象自身的可枚举属性

function isNullObj2(obj) {
    return JSON.stringify(obj) === '{}'
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值