最常用的轉(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。
