首頁 > web前端 > js教程 > 主體

喬治和羅伯特走進一家酒吧…

PHPz
發布: 2024-07-16 17:02:50
原創
856 人瀏覽過

George and Robert walk into a bar...

標題聽起來可能只是一個笑話在等著你(我知道,這是一個 SEO 災難)。抱歉讓您失望了。這篇文章其實是關於 ES2021 中引入的 JavaScript 邏輯賦值運算子。請繼續閱讀,了解喬治和羅伯特與此有何關係......

歷史背景

邏輯賦值運算子本質上是布林邏輯和賦值運算的混合。但這些組件的作用比人們原先想像的還要多。

一方面,許多(如果不是大多數)開發人員可能沒有意識到布林邏輯與現代計算結構的交織程度有多深。它從電腦電路延伸到程式碼中的條件語句。

我們每天也使用等號,但常常沒有經過太多思考。這個符號現在在數學和編碼中都至關重要,它是在 16 世紀為數學目的而發明的。大約 400 年後,在 20 世紀 50 年代,它進入了電腦程式設計領域。

如果您對這段歷史背景沒有一點興趣,請隨意跳到「理解邏輯賦值運算子」部分。否則,請和我一起來一趟短暫的時光之旅。

喬治·布爾

最早的邏輯研究歸功於古希臘人,特別是亞里斯多德,他通常被稱為「邏輯之父」。他發展了一種形式邏輯系統,為邏輯運算子的使用奠定了基礎。

我們今天所知的邏輯運算子的真正數學基礎隨著 19 世紀符號邏輯的出現而開始形成。它使用符號來表示邏輯形式和結構,這允許更複雜和抽象的推理。

19 世紀英國數學家和邏輯學家喬治·布爾 (George Boole) 在他的開創性著作《思維定律》(1854) 中引入了邏輯的代數方法。這裡的值可以是 true 或 false,並且可以對這些值執行操作,類似於代數運算。該系統包括基本的邏輯運算符:

  • AND(連接詞)
  • 或(析取)
  • NOT(否定)

在布爾工作的基礎上,其他數學家和邏輯學家擴展了符號邏輯的範圍和深度。 20 世紀中葉,它在新興的電腦科學領域找到了一片新的沃土。事實證明,布林邏輯的二進位性質非常適合電腦核心的數位電路,其中資料可以表示為一系列 0 和 1,並且邏輯運算子可以控制該資料的流動。

邏輯運算子成為程式語言的基本組成部分,允許在軟體中建立複雜的計算邏輯和決策過程。如今,它們已成為幾乎所有程式語言語法中不可或缺的一部分。

羅伯特·雷科德

等號是由威爾斯數學家 Robert Recorde 於 1557 年在他的著作《維特的磨刀石》中提出的。雷科德厭倦了在作品中反覆書寫“等於”,因此他選擇了兩條等長的平行線作為平等的符號。正如他所說,這是因為“noe 2 thynges can be moare equalle”。這是數學符號的重大發展,提供了一種簡潔明了的方式來表達相等。

在程式設計的早期,特別是在機器碼和組合語言中,「賦值」的概念更多的是關於在暫存器和記憶體位置之間儲存和移動資料。使用特定的操作碼給予指令,指示機器執行這些操作。

隨著高階程式語言的發展,需要一種更抽象和人類可讀的方式來表示為變數賦值的操作。這導致許多語言採用等號作為賦值運算符,從 20 世紀 50 年代的 FORTRAN 開始。

使用 = 進行賦值會導致其相等的數學意義產生一些歧義。這導致引入不同的符號來闡明程式意圖:

  • Algol 於 20 世紀 60 年代開發,引入了 := 賦值符號,以區別於相等比較。
  • C 後來普及了使用 = 進行賦值和使用 == 進行相等性測試,這是許多後續語言都遵循的約定。

隨著時間的推移,程式語言引入了各種形式的賦值運算子來有效地處理不同的操作,例如複合賦值運算子(+=、-=等)以及最近在JavaScript 中的邏輯賦值運算符。

了解邏輯賦值運算符

邏輯賦值運算子是 JavaScript 中的語法糖,它將賦值 (=) 與邏輯 (&&、||) 或空合併 (??) 運算子結合。共有三種:

  • 邏輯與賦值(&&=):僅當左側變數為真時,才將右側的值賦給左側的變數。
  • 邏輯或賦值(||=):僅當左側變數為假時,才將右側的值賦給左側的變數。
  • 空合併賦值(??=):僅當左側變數為 null 或未定義時,才將右側的值指派給左邊的變數。

邏輯與賦值 (&&=)

&&= 運算子是僅當變數目前包含真值時設定變數值的捷徑。它在只有特定條件成立時才應繼續執行操作的場景中特別有用。

範例用例:功能切換

想像一個場景,其中某些功能只能為管理員啟用:

const isAdmin = user.isAdmin();
let canAccessDashboard = isAdmin;

canAccessDashboard &&= user.isAuthenticated();
console.log(canAccessDashboard); // true if user is authenticated, otherwise false
登入後複製

此程式碼片段確保僅當 isAdmin 和 user.isAuthenticated() 都為 true 時,canAccessDashboard 才為 true,從而有效地保護了兩個條件背後的功能。

邏輯或賦值 (||=)

||= 運算子可讓您在變數目前持有假值(例如 null、undefined、0、false、「」)時為該變數賦值。這對於設定預設值非常有用。

範例用例:設定預設值

const userSettings = {
  theme: null,
};

// Set default theme if none is specified
userSettings.theme ||= "dark";
console.log(userSettings.theme); // Outputs 'dark'
登入後複製

此運算子非常適合初始化尚未設定的變量,確保您的應用程式使用合理的預設值,而不會覆蓋 0 或 false 等潛在有意義的虛假值。

空合併賦值 (??=)

??運算符,稱為空合併運算符,是程式語言中相對較新的新增內容。從嚴格意義上來說,它不是邏輯賦值運算符,儘管 ES2021 規範將其分類為邏輯賦值運算符,因為它不是基於邏輯運算符。相反,它的開發與程式設計的實際需求更加緊密地聯繫在一起,特別是在以乾淨且可預測的方式處理 null 和未定義值方面。

當且僅當變數目前為 null 或未定義時,??= 運算子用於為變數賦值。這比 ||= 運算子更精確,後者也考慮了其他虛假值。

範例用例:配置預設值

const config = {
  timeout: 0,
};

config.timeout ??= 5000; // Set default timeout if not specified, i.e. undefined, or null
console.log(config.timeout); // Outputs 0, preserving the explicitly set falsy value
登入後複製

此運算子在配置和設定中特別有用,其中預設值應僅填充缺失值,而不替換其他虛假但有效的設置,例如 0。

實際好處和注意事項

使用邏輯賦值運算符,而不是 if 或三元語句,可以減少您需要編寫的程式碼量,並且可以讓其他開發人員更清楚您的意圖。與許多功能一樣,關鍵是明智地使用這些運算符,尤其是在處理在程式碼上下文中有效的虛假值時。

附加說明

JavaScript 中有更多賦值運算符,例如左移賦值運算子 (

(Freepik 上的 starline 封面圖片)

以上是喬治和羅伯特走進一家酒吧…的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!