判断对象是否为空 | 青训营笔记

94 阅读1分钟

 本人前端小白一枚,为了方便自己复习,也为了跟我一样的小白,整理了一些方法。

1.for in

        

function isEmptyObject(obj){
    for(let i in obj){
        return false;
    }
    return true;
}

        遍历对象,若有属性则返回false,无属性则返回true.

2.Object.getOwnPropertyNames()

function isEmptyObject(obj){
    return Object.getOwnProperty(obj).length === 0;
}

该方法是ES5标准,返回对象所有的属性名的数组。

3.Object.keys() 

function isEmptyObject(obj){
    return Object.keys(obj).length === 0;
}

该方法是ES6标准,类似于Object.getOwnPropertyNames(),将对象转换为数组。

需要注意的是若传入的参数为null和undefined时会报错

function isEmptyObject(obj) {
  return Object.keys(obj).length === 0;
}
isEmptyObject(null); // Uncaught TypeError: Cannot convert undefined or null to object
isEmptyObject(undefined); // Uncaught TypeError: Cannot convert undefined or null to object

解决方法:

function isEmptyObject(obj){
    return Object.keys(obj || []).length === 0;
}

这里解释一下为什么加了一个 || []就可以解决,obj || [] ,若obj为假(参数obj为null、undefined),则返回空数组。

4.JSON.stringfy()

function isEmptyObject(obj) {
  return JSON.stringify(obj) === "{}";
}

这么写判断大多数对象都不会有问题,不过一旦遇到出现“循环引用”的对象,就会报错,咱就是说那是不用吧……

感觉js这个东西不只是要理解吧,还得多敲,说了一句废话,学编程不就是要多敲嘛,多敲才有感觉,而且不只是把这个知识点敲下来,有可能的话要运用到实际的项目中,比如也可以自己封装个小功能呀摆在那,说不定哪天就用上了呢,别看js基础知识很简单,但有的时候不是你能力不行而是你没想到,所以记忆这些也是有用的,对这些知识不单只局限在他们表面上能做到什么,要多联想,多联系一下实际情景然后根据需求做一个小功能,我们现在也经常逛网站啊看视频什么的,也许看到哪个功能我们就会想一想:哎他这个是怎么实现的,然后自己去查查资料啊,自己也做一个,只有这样水平才能越来越高,不然会卡在瓶颈,你会觉得明明每天都在敲代码可是为什么到了实际用的时候就大脑空空(本人就是如此)。