1.轉(zhuǎn)換成字符串進(jìn)行比較
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('是數(shù)組')
}
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.解決思路
第一種就是粗暴的直接轉(zhuǎn)字符串,然后強(qiáng)行比較第二種就是利用for in的原理,然后一旦進(jìn)了循環(huán),說明有key值,那直接false啦,否則就是空對象
2.性能比較
下面測試一下兩個方法的性能比較第一種在a就是一個空對象的情況下,在Imac谷歌瀏覽器上平均耗時在0.012ms左右
第二種在a就是一個空對象的情況下慌闭,在Imac谷歌瀏覽器上平均耗時在0.007ms左右,性能差距為兩倍
第一種在a是一個普通對象的情況下,豆瓣的api對象躯舔,在Imac谷歌瀏覽器上平均耗時在0.08ms左右
第二種在a是一個普通對象的情況下驴剔,豆瓣的api對象,在Imac谷歌瀏覽器上粥庄,第一次稍慢丧失,0.02ms,平均耗時在0.0075ms左右,性能差距隨著對象越大,差距也會越大