js通過這幾種方法判斷Obj為空

最常用的轉(zhuǎn)字符串方法

最常用的判斷字符串是否為空

function isEmpty(obj){

? ? return JSON.stringify(obj)==='{}';

}

console.log(isEmpty({})) //true

通過Object的方法判斷

判斷方法如下:

function isEmpty2(obj){

? ? return Object.keys(obj).length===0;

}

console.log(" Object.keys(obj)",isEmpty2({}))//true

另一種方法:

function isEmpty3(obj){

? ? return Object.values(obj).length===0;

}

console.log(" Object.values(obj)",isEmpty3({}))

通過Object.getOwnPropertyNames()返回一個數(shù)組:

function isEmpty4(obj){

? ? return Object.getOwnPropertyNames(obj).length === 0;

}

console.log(" Object.getOwnPropertyNames(obj)",isEmpty4({}))//true

通過for...of...方法判斷

function isEmpty5(obj){

? ? let flag=true;

? ? for (const key in obj) {

? ? ? if(key) {

? ? ? ? flag=false;

? ? ? }

? ? }

? ? return flag;

}

console.log("for...in",isEmpty5({}))//true

特殊情況

但是以上幾種方法都無法判斷一種特殊情況,就是下面這種情況 symbol類型key值:每個從Symbol()返回的symbol值都是唯一的。一個symbol值能作為對象屬性的標識符;

const obj={

? ? [Symbol("a")]:"david"

}

使用以上五種方法傳入這個對象得到的結(jié)果如下

這就說明了上面的這五種判斷還不夠嚴謹。

解決:

function isEmpty6(obj){

? ? return Reflect.ownKeys(obj).length===0;

}

console.log("Reflect.ownKeys(obj)",isEmpty6(obj));

輸出的結(jié)果如下:

可以看到他返回的是false,所以為了嚴謹,公司判斷是否對象為空的時候可以替換成這個方法

Reflect.ownKeys(obj)這個方法返回一個數(shù)組,里面是所有key值

但是js中不是已經(jīng)有了Object.keys()嗎,那他倆什么區(qū)別呢?

Object.keys(obj) : 結(jié)果是object 上所有可以枚舉的key;

Reflect.ownKeys(obj) : 結(jié)果是所有的 key。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容