目錄
無條件 vs 有條件
數學運算符,例如 是無條件的。
邏輯運算符,例如&&是有條件的
二元邏輯運算子
&&= ||= ??=
虛值  vs Nullish
一些例子
邏輯賦值運算子
邏輯與賦值( &&= )
邏輯或賦值( ||= )
邏輯nullish 賦值( ??= )
實作中邏輯賦值的範例
如何在專案中使用邏輯賦值
首頁 web前端 js教程 詳解javascript中邏輯運算符

詳解javascript中邏輯運算符

Nov 10, 2020 pm 05:41 PM
javascript 運算符

詳解javascript中邏輯運算符

推薦教學:《JavaScript影片教學

#邏輯賦值是現有數學和二進位邏輯運算子的擴充。我們先複習一下,然後看看把它們結合在一起能得到什麼。

首先,我們來看 JS 中條件運算子無條件運算子之間的差異。

無條件 vs 有條件

數學運算符,例如 是無條件的。

const x = 1 2中,無論如何,我們總是將LHS加入RHS中,並將結果指派給x

LHS 和 RHS 是數學領域內的概念,意為等式左邊和等式右邊的意思,在我們現在的場景下就是賦值運算子的左邊和右邊。當變數出現在賦值運算子的左邊時,就進行 LHS 查詢;反之進行 RHS 查詢。

我們甚至可以寫一些奇怪的程式碼,例如const x = false 2。 JS 先將false的LHS 轉換為Number,因此得到const x = Number(false) 2,其結果為const x = 0 2 。它將 LHS 新增至RHS,最後將其指派給x,得出2

邏輯運算符,例如&&是有條件的

const x = true && 0 2中,首先計算LHS,它為true。因為 LHS 的值為true,所以我們接下來執行 RHS 操作,它的值為2,同時也執行賦值操作,結果是2

const x = false && 0 2相比,LHS 為 false,因此 RHS 被完全忽略。

你可能想知道為什麼要避免計算RHS? 兩個常見的原因是獲得更好的性能和避免副作用

二元邏輯運算子

&& || ??

在JSX 中我們經常使用&&||來有條件地渲染介面。 ??nullish(空值)合併運算符,它是最近剛通過提案的,很快就會普及。它們都是 二元邏輯運算子。

  • 使用&&測試 LHS 的結果是否為真值。
  • 使用||測試 LHS 的結果是否為虛值。
  • ?? 測試 LHS 是否無效。

虛值  vs Nullish

在 JS 中有哪些算是虛值呢?

  • null
  • undefined
  • false
  • NaN
  • 0
  • "" (空字串)

下面這兩個姊妹被認為是nullish 值。

  • null
  • undefined

值得注意的是,使用二元邏輯運算子不一定會傳回布林值,而是傳回表達式的LHSRHS值。為了明確這些表達式類型的要點,重看一下ECMAScript 文件中的這句話是有幫助的:

&&||產生的值不一定是布林型的,而是兩個操作數表達式之中的一個值。

一些例子

// &&
/ /如果 LHS 是真值,计算并返回 RHS,否则返回 LHS

true && 100**2 // 10000
 
"Joe" && "JavaScript" // "JavaScript"
 
false && 100**2 // false
 
"" && 100**2 // ""
 
NaN && 100**2 // NaN
 
null && 100**2 // null
 
undefined && 100**2 // undefined
登入後複製

邏輯賦值運算子

&&= ||= ??=

這個運算子將賦值與條件邏輯運算子結合在一起,因此命名為“邏輯賦值”。它們只是一種簡寫, 例如,x && = yx && (x = y) 的簡寫。

從邏輯賦值傳回的值不是更新的賦值,而是已計算表達式的值。

由於先前的ECMAScript特性,例如預設參數和nullish合併操作符,你可以說在邏輯賦值所提供的功能中肯定存在一些冗餘。雖然這種速記看起來很流暢,而且我相信當我們發現更多的用例時,它會派上用場的。

邏輯與賦值( &&= )

// 逻辑与
LHS &&= RHS
// 等价于 
LHS && (LHS = RHS)
 
// 事例
// if x is truthy, assign x to y, otherwise return x
// 如果 x 为真值,则将 y 赋值给 x, 否则返回 x
let x = 1
const y = 100
x &&= y // x 为 100
  
// 与上面对应的长的写法
x && (x = y)
登入後複製

邏輯或賦值( ||= )

// 逻辑或
LHS ||= RHS
 
// 等价于
LHS || (LHS = RHS)
 
// 事例
// 如果 x 为真值,返回 x,否则将 y 赋值给 x
let x = NaN
const y = 100
x ||= y // x 为 100
 
// 与上面对应的长的写法
x || (x = y)
登入後複製

邏輯nullish 賦值( ??= )

// 逻辑 nullish
LHS ??= RHS
 
// 等价于
LHS ?? (LHS = RHS)
 
// 事例
// if x.z is nullish, assign x.z to y
let x = {}
let y = 100;
x.z ??= y // x 为 { z: 100 }
 
// 与上面对应的长的写法
x.z ?? (x.z = y)
登入後複製

實作中邏輯賦值的範例

React中的JSX

let loading = true
const spinner = <Spinner />
loading &&= spinner
登入後複製

DOM

el.innerHTML ||= 'some default'
登入後複製

物件

// 如果对象没有 onLoad 方法,则设置一个方法
const config = {};
config.onLoad ??= () => console.log('loaded!')
登入後複製
const myObject = { a: {} }
 
myObject.a ||= 'A'; // 被忽略,因为 myObject 中 a 的值为真值
myObject.b ||= 'B'; // myObject.b 会被创建,因为它不丰 myObject 中
 
// {
//  "a": {}
//  "b": "B"
// }
 
myObject.c &&= 'Am I seen?'; // 这里的 myObject.c 为虚值,所以什么都不会做
登入後複製

如何在專案中使用邏輯賦值

Chrome 已經支援邏輯賦值。為了向後相容,請使用 transformer。如果您使用的是Babel,請安裝外掛:

npm install @babel/plugin-proposal-logical-assignment-operators
登入後複製

並在.babelrc 中加入發佈內容:

{
  "plugins": ["@babel/plugin-proposal-logical-assignment-operators"]
}
登入後複製

邏輯賦值是一個全新的概念,所以還沒有太多相關的知識。如果你有其他關於邏輯賦值的好用法的例子,請在下面留下評論。

英文原文網址:https://seifi.org/javascript/javascript-logical-assignment-operators-deep-dive.html

作者:Joe Seifi

更多程式相關知識,請造訪:程式設計入門! !

以上是詳解javascript中邏輯運算符的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

C語言中+=運算子的意義與用法解析 C語言中+=運算子的意義與用法解析 Apr 03, 2024 pm 02:27 PM

+=運算子用於將左操作數的值加上右操作數的值,並將結果賦值給左操作數,適用於數字類型且左操作數必須可寫。

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

Python 語法的心智圖:深入理解程式碼結構 Python 語法的心智圖:深入理解程式碼結構 Feb 21, 2024 am 09:00 AM

python憑藉其簡單易讀的語法,廣泛應用於廣泛的領域。掌握Python語法的基礎架構至關重要,既可以提高程式效率,又能深入理解程式碼的運作方式。為此,本文提供了一個全面的心智圖,詳細闡述了Python語法的各個面向。變數和資料類型變數是Python中用於儲存資料的容器。心智圖展示了常見的Python資料類型,包括整數、浮點數、字串、布林值和列表。每個資料類型都有其自身的特性和操作方法。運算符運算符用於對資料類型執行各種操作。心智圖涵蓋了Python中的不同運算子類型,例如算術運算子、比

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務

go語言運算子優先順序怎麼排序 go語言運算子優先順序怎麼排序 Dec 21, 2023 pm 05:03 PM

在Go語言中,運算子按照優先權從高到低的順序進行計算。常見的運算子的優先順序:1、括號:()(最高優先權,用於強制改變運算順序);2、單目運算子;3、乘性運算子;4、加性運算子; 5.移位運算子;6、位元運算子;7、比較運算子;8、邏輯運算子;9、條件運算子(三元運算子);10、賦值運算子等等。

See all articles