js 如何判斷對(duì)象自身為空?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1. JSON.stringify
const obj = {}; console.log(JSON.stringify(obj) === '{}') // true 缺點(diǎn):如果存在 如下示例: const obj = { a: undefined, b: function() {}, c: Symbol() } console.log(JSON.stringify(obj) === '{}') // true 2. for in 配合 hasOwnProperty使用 const obj = {} Object.prototype.a = 1 function isEmptyObj(obj) { let flag = true for (let o in obj) { flag = false break } return flag } console.log(isEmptyObj(obj)) // false 由于 const obj = {} Object.prototype.a = 1 function isEmptyObj(obj) { let flag = true for (let o in obj) { if (obj.hasOwnProperty(o)) { flag = false break } } return flag } console.log(isEmptyObj(obj)) // true 缺點(diǎn): 3. Object.keys
const obj = {} Object.prototype.a = 1 console.log(Object.keys(obj).length === 0) // true 缺點(diǎn): 我們使用 const obj = {} Object.defineProperty(obj, 'a', { value: 1, enumerable: false }) console.log(obj.a) // 1 console.log(isEmptyObj(obj)) // true console.log(Object.keys(obj).length === 0) // true 4. Object.getOwnPropertyNames使用 const obj = {} Object.defineProperty(obj, 'a', { value: 1, enumerable: false }) console.log(Object.getOwnPropertyNames(obj)) // [ 'a' ] 缺點(diǎn):不能獲取 const a = Symbol() const obj = { [a]: 1 } console.log(obj) // { [Symbol()]: 1 } console.log(Object.getOwnPropertyNames(obj).length === 0) // true console.log(JSON.stringify(obj) === '{}') // true console.log(isEmptyObj(obj)) // true console.log(Object.keys(obj).length === 0) // true 5. Object.getOwnPropertyNames 結(jié)合 Object.getOwnPropertySymbols已知 const a = Symbol() const obj1 = { [a]: 1 } const obj2 = {b: 2} const obj3 = {} Object.defineProperty(obj3, 'a', { value: 1, enumerable: false }) const obj4 = {} function getLength(obj) { return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)).length } console.log(getLength(obj1) === 0) // false console.log(getLength(obj2) === 0) // false console.log(getLength(obj3) === 0) // false console.log(getLength(obj4) === 0) // true 經(jīng)過(guò)測(cè)試,上面這種方法的確可以解決,但是比較繁瑣,那有沒(méi)有更好的方法呢?答案是有的。 6. Reflect.ownKeys
const a = Symbol() const obj1 = { [a]: 1 } const obj2 = {b: 2} const obj3 = {} Object.defineProperty(obj3, 'a', { value: 1, enumerable: false }) const obj4 = {} console.log(Reflect.ownKeys(obj1).length === 0) // false console.log(Reflect.ownKeys(obj2).length === 0) // false console.log(Reflect.ownKeys(obj3).length === 0) // false console.log(Reflect.ownKeys(obj4).length === 0) // true 總結(jié)判斷一個(gè)對(duì)象是否為空時(shí),使用
該文章在 2023/11/27 12:02:10 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |