JavaScript中判斷對象是否為空的方法小結(jié)
在JavaScript中,判斷一個(gè)對象是否為空可以有多種方法。以下是一些常用的方法:
使用Object.keys()方法:(重點(diǎn)推薦)
function isEmpty(obj) { return Object.keys(obj).length === 0; } const obj = {}; console.log(isEmpty(obj)); // true
Object.keys() 是相對快速的,因?yàn)樗苯臃祷匾粋€(gè)包含所有自有屬性的數(shù)組。而且返回的數(shù)組包含了所有可枚舉的自有屬性名,但不包括原型鏈上的屬性。
使用JSON.stringify()方法
function isEmpty(obj) { return JSON.stringify(obj) === '{}'; } const obj = {}; console.log(isEmpty(obj)); // true
JSON.stringify()擴(kuò)展
JSON.stringify() 方法用于將 JavaScript 值轉(zhuǎn)換為 JSON 字符串。
語法:
JSON.stringify(value[, replacer[, space]])
參數(shù)說明:
value:必需,要轉(zhuǎn)換的 JavaScript 值(通常為對象或數(shù)組)。
replacer: 可選。用于轉(zhuǎn)換結(jié)果的函數(shù)或數(shù)組。 如果 replacer 為函數(shù),則 JSON.stringify 將調(diào)用該函數(shù),并傳入每個(gè)成員的鍵和值。使用返回值而不是原始值。 如果此函數(shù)返回 undefined,則排除成員。根對象的鍵是一個(gè)空字符串:""。如果 replacer 是一個(gè)數(shù)組,則僅轉(zhuǎn)換該數(shù)組中具有鍵值的成員。成員的轉(zhuǎn)換順序與鍵在數(shù)組中的順序一樣。
space:可選,文本添加縮進(jìn)、空格和換行符,如果 space 是一個(gè)數(shù)字,則返回值文本在每個(gè)級別縮進(jìn)指定數(shù)目的空格,如果 space 大于 10,則文本縮進(jìn) 10 個(gè)空格。space 也可以使用非數(shù)字,如:\t。
返回值:返回包含 JSON 文本的字符串。
JSON.stringify() 可能會(huì)比其他方法慢一些,因?yàn)樗枰獙ο筠D(zhuǎn)換成字符串。此外,如果對象中包含不可序列化的屬性(如函數(shù)、循環(huán)引用等),它會(huì)拋出錯(cuò)誤。而且不適用于包含不可序列化屬性的對象,且不推薦用于復(fù)雜的深比較。
使用for...in循環(huán)
function isEmpty(obj) { for (let key in obj) { if (obj.hasOwnProperty(key)) { return false; } } return true; } const obj = {}; console.log(isEmpty(obj)); // true
for…in 循環(huán)通常比直接方法慢,因?yàn)樗枰闅v對象的所有屬性,包括原型鏈上的可枚舉屬性。
所以為了避免檢查原型鏈上的屬性,通常需要在循環(huán)中加入 hasOwnProperty 檢查。
使用Object.getOwnPropertyNames()方法
function isEmpty(obj) { return Object.getOwnPropertyNames(obj).length === 0; } const obj = {}; console.log(isEmpty(obj)); // true
這個(gè)方法相對較快,因?yàn)樗祷匾粋€(gè)包含所有自有屬性的數(shù)組,不管屬性是否可枚舉。并且這個(gè)方法不會(huì)返回原型鏈上的屬性,但會(huì)返回不可枚舉的自有屬性。
使用Reflect.ownKeys()方法
function isEmpty(obj) { return Reflect.ownKeys(obj).length === 0; } const obj = {}; console.log(isEmpty(obj)); // true
Reflect.ownKeys() 的性能與 Object.getOwnPropertyNames() 類似,因?yàn)樗卜祷厮凶杂袑傩缘臄?shù)組,包括不可枚舉的和符號屬性。這個(gè)方法提供了最全面的屬性列表,包括符號屬性,但不包括原型鏈上的屬性。
// 創(chuàng)建一個(gè)符號 const symbolKey = Symbol('uniqueKey'); // 創(chuàng)建一個(gè)對象,包含不同類型的屬性 const obj = { enumerableProp: '可枚舉的字符串屬性', [symbolKey]: '符號屬性' }; // 設(shè)置一個(gè)不可枚舉的屬性 Object.defineProperty(obj, 'nonEnumerableProp', { value: '不可枚舉的字符串屬性', enumerable: false }); // 檢查對象的屬性 console.log('使用Object.keys()'); console.log(Object.keys(obj)); // 只顯示可枚舉的非符號屬性 console.log('\n使用Object.getOwnPropertyNames()'); console.log(Object.getOwnPropertyNames(obj)); // 顯示所有自有屬性(包括不可枚舉的),但不包括符號屬性 console.log('\n使用Object.getOwnPropertySymbols()'); console.log(Object.getOwnPropertySymbols(obj)); // 顯示所有符號屬性 console.log('\n使用Reflect.ownKeys()'); console.log(Reflect.ownKeys(obj)); // 顯示所有自有屬性,包括不可枚舉的和符號屬性
總結(jié)
在實(shí)際應(yīng)用中,如果你的對象很大,或者你正在一個(gè)性能關(guān)鍵的操作中,那么使用 Object.keys() 或 Object.getOwnPropertyNames() 可能會(huì)更合適,因?yàn)樗鼈冎苯臃祷貙傩粤斜矶恍枰~外的遍歷或字符串轉(zhuǎn)換。
方法補(bǔ)充
除了上文的方法,小編還為大家整理了一些JS判斷空對象的其他方法,希望對大家有所幫助
Object.getOwnPropertyNames()
Object 對象的 getOwnPropertyNames 方法,獲取到對象中的屬性名,存到一個(gè)數(shù)組中,返回?cái)?shù)組對象,我們可以通過判斷數(shù)組的 length 來判斷此對象是否為空。
var data = {} //undefined var arr = Object.getOwnPropertyNames(data) //undefined arr.length //0 var data1 = {name: 1,value:2} //undefined var arr1 = Object.getOwnPropertyNames(data1) //undefined arr1.length //2
遍歷對象
var obj = {} var b = function() { for(var key in obj) { return false; } return true; } // 最終返回true則代表對象是空對象,為false,則代表不是空對象
jquery 的 isEmptyObject()方法
這個(gè)方法是對for in方法的封裝。
var data = {}; var b = $.isEmptyObject(data); console.log(b); //true
到此這篇關(guān)于JavaScript中判斷對象是否為空的方法小結(jié)的文章就介紹到這了,更多相關(guān)JavaScript判斷對象是否為空內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Auntion-TableSort javascript類文件
Auntion-TableSort javascript類文件...2007-11-11uni-app中使用手機(jī)號一鍵登錄的詳細(xì)圖文教程
最近剛接觸了uni-app,用于開發(fā)微信小程序,設(shè)計(jì)到了微信授權(quán)登錄,下面這篇文章主要給大家介紹了關(guān)于uni-app中使用手機(jī)號一鍵登錄的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01JS實(shí)現(xiàn)中國公民身份證號碼有效性驗(yàn)證
這篇文章主要介紹了JS實(shí)現(xiàn)中國公民身份證號碼有效性驗(yàn)證,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法分析
這篇文章主要介紹了微信小程序列表渲染功能之列表下拉刷新及上拉加載的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了微信小程序列表下拉刷新及上拉加載的相關(guān)實(shí)現(xiàn)方法與技巧操作,需要的朋友可以參考下2017-11-11uniapp實(shí)現(xiàn)點(diǎn)擊出現(xiàn)彈窗功能實(shí)例
這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)點(diǎn)擊出現(xiàn)彈窗功能的相關(guān)資料,UniApp框架中提供了兩種不同類型的彈出框,以幫助我們滿足不同的需求,需要的朋友可以參考下2023-08-08