1.转换成字符串进行比较
function IsNullObj(obj){
if(JSON.stringify(obj) === "{}"){
console.log("true");
}else{
console.log("false");
}
}
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
}
}
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左右,性能差距随着对象越大,差距也会越大
网友评论