JavaScript >> Javascript 文檔 >  >> Tags >> object

JavaScript:檢查對像是否為空

簡介

對像用於存儲屬性的集合,每個屬性都可以被認為是一個名稱(或 key ) 和一個鍵值對的集合 對)。

對於不需要外部依賴項的小型應用程序 - 檢查對像是否為空最好使用純 JavaScript 完成。但是,如果您的應用程序已經有外部庫,例如 lodash下劃線 - 它們也提供了執行這些檢查的好方法。

檢查對像是否為空是一項基本且頻繁的操作,但是,有幾種方法可以確定對像是否為空。

讓我們從使用對象字面量語法創建一個空對像開始:

const emptyObject = {}

使用Object.keys() 方法

Object.keys() 是一個靜態方法,當我們將一個對像傳遞給它時,它會返回一個數組,其中包含屬於該對象的屬性名稱(鍵)。我們可以檢查length是否 這個數組是 0 或更高 - 表示是否存在任何鍵。如果沒有鍵,則對象為空:

Object.keys(obj).length === 0 && obj.constructor === Object;

注意: 構造函數檢查確保傳遞的參數確實是一個對象。

如果您在項目中多次使用檢查,我們還可以創建一個可重用的函數:

const isEmptyObject = (obj) => {
    return Object.keys(obj).length === 0 && obj.constructor === Object;
}

console.log(isEmptyObject(emptyObject)); // true

這是迄今為止確定對像是否為空的最簡單的方法,但它有點冗長。我們將通過以下方法消除這種冗長 - 在我們查看 Object.values() 之後 和 Object.entries() 靜態方法,其使用方式與 Object.keys() 大致相同 .

使用Object.values() 方法

就像鍵一樣 - 如果一個對像沒有 values 關聯的(甚至不是 undefined /null ) - 它是空的:

const isEmptyObject = (obj) => {
    return Object.values(obj).length === 0 && obj.constructor === Object;
}

console.log(isEmptyObject(emptyObject)); // true
使用Object.entries() 方法

entries() 方法表示所有鍵值對(條目),可以用作上述兩種方法的包裝器:

const isEmptyObject = (obj) => {
    return Object.entries(obj).length === 0 && obj.constructor === Object;
}

console.log(isEmptyObject(emptyObject)); // true

for...inhasOwnProperty()

對於不支持 keys() 的瀏覽器 , values()entries() 方法 - 您可以顯式循環遍歷屬性!您可以將此邏輯包裝在返回 true 的方法中 如果沒有找到屬性,則 false 如果找到屬性:

const isEmptyObject = (objectName) => {
    for (var prop in objectName) {
        if (objectName.hasOwnProperty(prop)) {
            return false;
        }
    }
    return true;
}

console.log(isEmptyObject(emptyObject)); // true

使用 JSON.stringify

這是最簡單的使用方法之一。當我們字符串化 一個對象,輸出只是一個左括號和右括號,我們知道該項目是空的:

JSON.stringify(objectName) === '{}';

我們也可以很容易地被包裝成一個函數:

const isEmptyObject = (objectName) => {
    return JSON.stringify(objectName) === '{}';
}

console.log(isEmptyObject(emptyObject)); // true

使用 JavaScript 庫檢查對像是否為空

庫通過整合無數其他開發人員使用和磨練的高級功能,幫助我們更快地編寫代碼,而不是編寫我們自己的解決方案。

庫很常見,通常快速/優化,並且由於它們的有用性而存在於許多項目中。其中一些也可用於檢查對像是否為空。它們中的大多數都為舊版瀏覽器提供了出色的兼容性。

使用下劃線和 Lodash

lodash下劃線 是提供相當多的通用實用程序的實用程序庫。它們通常都作為 _ 導入 ,並且可以通過 CDN 導入:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/underscore-umd-min.js"></script>

或者安裝NPM之類的包管理器,然後通過require()導入 語法:

$ npm install lodash
$ npm install underscore

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

const _ = require('lodash');
const _ = require('underscore');

兩個庫檢查對像是否為空的語法完全相同:

_.isEmpty();

此函數適用於任何數據結構 - 列表、數組、字符串、對像等。該函數是檢查傳入對象長度的邏輯的包裝器,返回 truefalse

_.isEmpty(emptyObject); // true
jQuery

jQuery 是一個流行的 JavaScript 庫,存在於世界各地的許多項目中。由於它的輕量級和擴展 JavaScript 內置功能範圍的特性 - 它已成為主打產品。

jQuery 可以通過 CDN 導入:

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>

或者安裝NPM之類的包管理器,然後通過require()導入 語法:

$ npm install jquery

它通常作為 $ 導入 :

const $ = require('jquery');

當然,您可以使用它來檢查對像是否為空:

$.isEmptyObject(emptyObject); // true
拉姆達

Ramda 是一個函數式 JavaScript 庫!它從不改變數據並支持創建純功能管道。對於那些具有更多函數式編程背景的人 - 這是一個很棒的庫,讓您有賓至如歸的感覺。

Ramda 可以通過 CDN 導入:

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js"></script>

或者安裝NPM之類的包管理器,然後通過require()導入 語法:

$ npm install ramda

它通常作為 R 導入 :

const R = require('ramda');

如果您已經在使用它 - 它提供 isEmpty() 功能也是:

R.isEmpty(emptyObject); // true
胡克

@hapi/hoek 是 hapi 生態系統的一部分 ,以及用於基於 hapi 的應用程序的流行實用方法庫。它提供了一個 deepEqual() 方法,檢查兩個對像是否相同(深度):

Hoek.deepEqual({}, emptyObject); // true

結論

在本文中,我們了解瞭如何在 JavaScript 中檢查對像是否為空。為此 - 我們使用了幾種 Vanilla JS 方法,jQuery、Underscore、Lodash、Ramda、Hoek 和 JSON 模塊。


Tutorial JavaScript 教程
  1. 出列數據結構簡化

  2. Console.error 或拋出新的錯誤?

  3. 跟我一起學習函數式編程 - 第 1 部分:語言選擇

  4. 如何使用tilt.js在你的元素上創建3d效果

  5. 開源項目反饋

  6. 使用 Cloud-Init 部署 Fonoster

  7. 使用 Algolia 和 IBM Watson 進行自動翻譯搜索

  1. 將 PostCSS 添加到 Create-React-App

  2. Browserify 入門

  3. React 提及 – 如何向 React 組件添加提及

  4. 我的 GatsbyJS 驅動博客的熱門插件

  5. 網絡調試的歷史

  6. MJSQ 101:特徵檢測、特徵推斷、UA字符串

  7. HTML畫布元素接觸檢測

  1. Dockerize 一個連接到 MongoDb 的 Node.js 應用程序

  2. 使用 TypeScript 設置 Node Express API (2021)

  3. 對新 Vue 的看法:在 Vue 3 中可以期待什麼

  4. 從我的第一個項目的完整源代碼開始,加速你的學習