js判断是不是空对象

1.转换成字符串进行比较

function IsNullObj(obj){
    if(JSON.stringify(obj) === "{}"){
        console.log("true");
    }else{
        console.log("false");
    }
}
js判断是不是空对象_第1张图片
image.png

2.利用for in 原理判断是否有key值

function IsNull(obj){  
    if(obj instanceof Array){  
        console.log('是数组')  
    }  
    else if(obj == undefined){  
        console.log('是undefined')  
    }  
    else if(obj == ''){  
        console.log('字符串')  
    }  
    else if(obj == null){  
        console.log('是null')  
    }  
    else{  
        for(var i in obj){  
            return false  
        }  
        return true  
    }  
}  
js判断是不是空对象_第2张图片
image.png
function IsEmptyObject(obj){
          if(!obj || typeof obj != 'object' || Array.isArray(obj)){
            return false;
          }
            //第一种
            //测试性能段
            /*
            console.time('first');
            if(JSON.stringify(obj) === '{}'){
                console.timeEnd ('first');
                return true
            }else{
                console.timeEnd ('first');
                return false;
            }
            */
            return (JSON.stringify(obj) === '{}')
            //第二种
            console.time('second');
            for(var key in obj){
                console.timeEnd ('second');
                return false 
            }
            console.timeEnd ('second');
            return true;
    }

1.解决思路

第一种就是粗暴的直接转字符串,然后强行比较第二种就是利用for in的原理,然后一旦进了循环,说明有key值,那直接false啦,否则就是空对象

2.性能比较

下面测试一下两个方法的性能比较第一种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.012ms左右
第二种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.007ms左右,性能差距为两倍

第一种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上平均耗时在0.08ms左右

第二种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上,第一次稍慢,0.02ms,平均耗时在0.0075ms左右,性能差距随着对象越大,差距也会越大

你可能感兴趣的:(js判断是不是空对象)