JavaScript運算符與邏輯中斷

目錄

JavaScript運算符

一、運算符分類與優先級

1. 運算符優先級表

二、算術運算符

1. 基礎算術運算

2. 自增/自減運算符

三、比較運算符

1. 基礎比較

2. 相等性判斷

四、邏輯運算符

1. 基礎邏輯運算

2. 短路求值(Short-Circuiting)

3. 邏輯賦值運算符(ES2021+)

五、位運算符

1. 基礎位運算

六、其他運算符

1. 三元條件運算符

2. 空值合并運算符(??)

3. 可選鏈運算符(?.)

4. 展開運算符(...)

七、常見陷阱與最佳實踐

1.?==?的隱式類型轉換

2. 浮點數精度問題

3. 短路求值的靈活應用

JavaScript邏輯中斷

一、邏輯與?&&?的短路

1. 假值列表

2. 示例

二、邏輯或?||?的短路

三、空值合并????的精準短路

四、實際應用場景

1. 條件執行函數

2. 鏈式屬性訪問

3. 組合使用

五、注意事項

六、總結


JavaScript運算符


一、運算符分類與優先級

1. 運算符優先級表

優先級從高到低排序(部分常見運算符):

優先級運算符說明
1()括號(強制優先級)
2++,?--,?!,?~,?typeof自增、自減、邏輯非、按位非等
3**指數(ES6+)
4*,?/,?%乘、除、取模
5+,?-加、減
6<<,?>>,?>>>位左移、右移、無符號右移
7<,?<=,?>,?>=比較運算符
8==,?!=,?===,?!==相等性判斷
9&按位與
10^按位異或
11|按位或
12&&邏輯與
13||邏輯或
14??空值合并(ES2020+)
15?:三元條件運算符
16=,?+=,?-=,?**=?等賦值運算符
17,逗號運算符(返回最后一個表達式)

二、算術運算符

1. 基礎算術運算

運算符名稱示例說明
+加法3 + 2?→?5數值相加或字符串拼接
-減法5 - 3?→?2
*乘法2 * 3?→?6
/除法6 / 2?→?3結果為浮點數(如?5 / 2 → 2.5
%取模7 % 3?→?1返回除法余數
**指數2 ** 3?→?8ES6+ 新增,等價于?Math.pow()

2. 自增/自減運算符

運算符示例說明
++let a = 1; a++后置自增:先返回值,再自增 →?a?變為?2
--let b = 2; --b前置自減:先自減,再返回值 →?b?變為?1
let i = 1
console.log(i++ + ++i + i)  //7

注意:避免在復雜表達式中混用前置和后置形式,易引發歧義。


三、比較運算符

1. 基礎比較

運算符名稱示例說明
>大于5 > 3?→?true
<小于2 < 1?→?false
>=大于等于5 >= 5?→?true
<=小于等于3 <= 2?→?false

2. 相等性判斷

運算符名稱示例說明
==寬松相等"5" == 5?→?true類型不同時嘗試轉換再比較
===嚴格相等"5" === 5?→?false值和類型均相同才返回?true
!=寬松不等"5" != 5?→?false等效于?!(a == b)
!==嚴格不等"5" !== 5?→?true等效于?!(a === b)

最佳實踐:始終優先使用?===?和?!==,避免隱式類型轉換導致的意外結果。


四、邏輯運算符

1. 基礎邏輯運算

運算符名稱示例說明
&&邏輯與true && false?→?false兩邊為?true?才返回?true
||邏輯或true || false?→?true任一邊為?true?即返回?true
!邏輯非!true?→?false取反

2. 短路求值(Short-Circuiting)

  • &&?短路:若左側為假,直接返回左側值,否則返回右側值。

    console.log(0 && "Hello"); // 0(左側為假,直接返回)
    console.log(2 && "Hello"); // "Hello"
  • ||?短路:若左側為真,直接返回左側值,否則返回右側值。

    console.log("" || "Default"); // "Default"
    console.log("Hello" || "Default"); // "Hello"

3. 邏輯賦值運算符(ES2021+)

運算符示例等效于
&&=a &&= ba = a && b
||=a ||= ba = a || b
??=a ??= ba = a ?? b(空值合并賦值)

五、位運算符

1. 基礎位運算

運算符名稱示例說明
&按位與5 & 3?→?1二進制位均為?1?時結果為?1
|按位或5 | 3?→?7二進制位任一為?1?則結果為?1
^按位異或5 ^ 3?→?6二進制位不同則結果為?1
~按位非~5?→?-6取反碼(二進制位取反)
<<左移5 << 1?→?10左移指定位數,右側補?0
>>右移(有符號)-5 >> 1?→?-3保留符號位,右側補?0
>>>右移(無符號)-5 >>> 1?→?2147483645忽略符號位,左側補?0

六、其他運算符

1. 三元條件運算符

  • 語法condition ? expr1 : expr2

    const status = age >= 18 ? "Adult" : "Minor";

2. 空值合并運算符(??)

  • 作用:左側為?null?或?undefined?時返回右側值,否則返回左側值。

    const value = input ?? "default"; 
    // 等效于 input !== null && input !== undefined ? input : "default"

3. 可選鏈運算符(?.)

  • 作用:安全訪問嵌套對象屬性,避免因中間屬性不存在而報錯。

    const city = user?.address?.city; 
    // 若 user 或 address 為 null/undefined,返回 undefined

4. 展開運算符(...)

  • 數組展開

    const arr1 = [1, 2];
    const arr2 = [...arr1, 3]; // [1, 2, 3]
  • 對象展開(ES2018+):

    const obj1 = { x: 1 };
    const obj2 = { ...obj1, y: 2 }; // { x: 1, y: 2 }

七、常見陷阱與最佳實踐

1.?==?的隱式類型轉換

console.log([] == ![]); 
// true([] 轉為 0,![] 轉為 false → 0)

解決方案:始終使用?===?和?!==

2. 浮點數精度問題

console.log(0.1 + 0.2 === 0.3); 
// false(實際結果為 0.30000000000000004)

解決方案:使用?toFixed()?或第三方庫(如?decimal.js)處理精度。

3. 短路求值的靈活應用

// 條件執行函數
function init() { console.log("Initialized"); }
let isInit = false;
isInit || init(); // 若未初始化,則調用 init()

? ?

JavaScript邏輯中斷


一、邏輯與?&&?的短路

規則:當左側表達式為?假值(falsy)?時,直接返回左側值,不再執行右側。

1. 假值列表

  • false

  • 0-00n(BigInt 零)

  • ""(空字符串)

  • null

  • undefined

  • NaN

2. 示例

// 示例 1:短路發生
console.log(0 && alert("不會執行")); // 輸出 0(左側為假,直接返回 0)// 示例 2:未短路
console.log(1 && "Hello"); // 輸出 "Hello"(左側為真,返回右側值)// 實際應用:條件渲染(React/Vue)
isLoggedIn && <Dashboard />;

二、邏輯或?||?的短路

規則:當左側表達式為?真值(truthy)?時,直接返回左側值,不再執行右側。

示例

// 示例 1:短路發生
console.log("Hello" || alert("不會執行")); // 輸出 "Hello"// 示例 2:未短路
console.log(0 || "默認值"); // 輸出 "默認值"// 實際應用:設置默認值(舊版寫法)
const port = config.port || 3000; // 注意:0 會被覆蓋!

三、空值合并????的精準短路

規則:僅當左側為?null?或?undefined?時,才返回右側值。

示例

// 示例 1:不短路
console.log(0 ?? "默認值"); // 輸出 0(保留 0)// 示例 2:短路發生
console.log(null ?? "備用值"); // 輸出 "備用值"// 實際應用:精準默認值(現代推薦)
const port = config.port ?? 3000; // 允許 0 或 ""

四、實際應用場景

1. 條件執行函數

// 僅當用戶存在時調用函數
user.isAdmin && showAdminPanel();// 替代寫法
if (user.isAdmin) showAdminPanel();

2. 鏈式屬性訪問

// 安全訪問嵌套屬性(舊版)
const city = user && user.address && user.address.city;// 現代替代方案:可選鏈操作符 `?.`
const city = user?.address?.city;

3. 組合使用

// 復雜條件判斷
const result = (condition1 && value1) || (condition2 && value2) ?? fallback;

五、注意事項

  1. 優先級問題
    邏輯運算符優先級:&&?>?||?>???,建議用?()?明確優先級:

    console.log(true || false && false); 
    // 輸出 true(等價于 true || (false && false))
  2. 副作用控制
    短路特性可能導致右側代碼未執行:

    let x = 0;
    false && x++; // x 仍為 0
  3. 避免過度使用
    雖然簡潔,但過度使用會降低可讀性:

    // ? 難以理解
    isValid && (isAdmin || isModerator) && submitForm();// ? 更清晰
    if (isValid && (isAdmin || isModerator)) {submitForm();
    }

六、總結

  • &&:用于?必須滿足前置條件?的場景(如權限檢查)。

  • ||:適合舊版默認值,但會覆蓋假值(0、"")。

  • ??:現代默認值方案,精準處理?null/undefined


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899419.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity頂點優化:UV Splits與Smoothing Splits消除技巧

一、頂點分裂問題概述 1. 什么是頂點分裂 頂點分裂(Vertex Splits)是3D渲染中常見的性能問題&#xff0c;當模型需要為同一頂點位置存儲不同屬性值時&#xff0c;會創建多個頂點副本。主要分為兩類&#xff1a; UV Splits&#xff1a;由UV不連續引起 Smoothing Splits&#…

OpenCV、YOLO與大模型的區別與關系

OpenCV、YOLO 和大模型的區別與關系 1. OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 定位&#xff1a;開源的計算機視覺基礎庫。功能&#xff1a;提供傳統的圖像處理算法&#xff08;如圖像濾波、邊緣檢測、特征提取&#xff09;和基礎工具&#xff…

CentOS 7 掛載與卸載文件系統筆記

掛載文件系統 掛載的基本概念 掛載是將存儲設備&#xff08;如硬盤分區、U 盤、光盤等&#xff09;連接到 Linux 文件系統的特定目錄&#xff08;掛載點&#xff09;&#xff0c;使得系統能夠訪問存儲設備上的數據。 查看已掛載的文件系統 命令&#xff1a;mount 或 df -h mo…

Git項目要改變倉庫地址

去掉原倉庫git地址和清除原項目的git版本信息的方法 場景需求: 如果是使用自己以前的項目、或者拉取了別人的項目到自己本地。想在此基礎上重新開發、初始化項目的話,最好先刪掉以前的git信息。 因為如果不刪除的話: 1.看著不舒服。根本不需要保留原來的版本信息。 2.我們…

NC,GFS、ICON 數據氣象信息可視化--降雨量的實現

隨著氣象數據的快速發展和應用&#xff0c;氣象信息的可視化成為了一項不可或缺的技術手段。它不僅能幫助氣象專家快速解讀數據&#xff0c;還能為公眾提供直觀的天氣預報信息。今天&#xff0c;我們將從降雨量的可視化出發&#xff0c;帶大家一起了解如何實現氣象數據的可視化…

質量工程師的2025:從“找bug“到“造質量“的職業進化

想象一下&#xff0c;2025年的某天&#xff1a;閱讀原文 早晨&#xff0c;AI測試助手已經自動運行了夜間回歸測試&#xff0c;并將可疑問題標記出來 你喝著咖啡&#xff0c;通過質量數據看板分析系統健康度 下午的會議上&#xff0c;你正用業務語言向產品經理解釋&#xff1a…

Python實現將字典中鍵相同的值合并

在Python字典中鍵是唯一的&#xff0c;但是業務需求是將不同的數據傳遞到不同的接口&#xff0c;接口列表中存在3個相同的接口&#xff0c;需要將3個接口對應的數據合并一同發送&#xff0c;邏輯實現如下 merge_dict {}for file in files:path os.path.join(folder_path, fil…

數據大屏點亮工業互聯網的智慧之眼

在當今數字化飛速發展的時代&#xff0c;數據已成為企業決策的核心依據&#xff0c;而數據大屏作為數據可視化的重要工具&#xff0c;正逐漸成為工業互聯網領域不可或缺的一部分。通過直觀、動態的可視化展示&#xff0c;數據大屏能夠將復雜的數據轉化為易于理解的圖表和圖形&a…

洛谷題單1-B2005 字符三角形-python-流程圖重構

題目描述 給定一個字符&#xff0c;用它構造一個底邊長 5 5 5 個字符&#xff0c;高 3 3 3 個字符的等腰字符三角形。 輸入格式 輸入只有一行&#xff0c;包含一個字符。 輸出格式 該字符構成的等腰三角形&#xff0c;底邊長 5 5 5 個字符&#xff0c;高 3 3 3 個字符…

UE4學習筆記 FPS游戲制作29 更換武器時更換武器的圖標

文章目錄 制作物體圖標UI添加獲取武器圖標的方法使用事件分發器&#xff0c;通知UI要換槍定義事件分發器調用事件分發器注冊事件分發器 制作物體圖標UI 在Fpp-UI上添加一個圖片&#xff0c;改名為五weaponIcon&#xff0c;勾選SizeToContent,錨點放在右下角&#xff0c;對齊改…

SpringMVC 請求與響應處理詳解

引言 在 Java Web 開發中&#xff0c;SpringMVC 作為 Spring 框架的重要模塊&#xff0c;提供了強大的請求和響應處理機制。本文將深入探討 SpringMVC 中請求和響應的處理方式&#xff0c;結合實際案例&#xff0c;幫助開發者更好地理解和應用這些功能。 一、SpringMVC 請求處…

從零開始的 Kafka 學習(四)| 生產消息

1. 生產消息 1.1 生產消息的基本步驟 &#xff08;一&#xff09;創建Map類型的配置對象&#xff0c;根據場景增加相應的配置屬性&#xff1a; 參數名參數作用類型默認值推薦值bootstrap.servers集群地址&#xff0c;格式為&#xff1a;brokerIP1:端口號,brokerIP2:端口號必…

k8s1.22 kubeadm 部署

k8s1.22 kubeadm 部署 1、更改hostname hostnamectl set-hostname master-001 && su root hostnamectl set-hostname node-001 && su root hostnamectl set-hostname node-002 && su root配置hsots cat >> /etc/hosts <<EOF 192.168.20.…

新手村:邏輯回歸-理解04:熵是什么?

新手村&#xff1a;邏輯回歸04&#xff1a;熵是什么? 熵是什么? 前置條件 在開始學習邏輯回歸中的熵理論之前&#xff0c;需要掌握以下基礎知識&#xff1a; 概率論與統計學&#xff1a; 概率分布&#xff08;如伯努利分布、正態分布&#xff09;。條件概率和貝葉斯定理。期…

STM32通用定時器結構框圖

STM32單片機快速入門 通用定時器框圖 TIM9和TIM12 通用定時器框圖 TIM9和TIM12 &#xff08;二&#xff09; 通用定時器框圖

3.28-2 jmeter讀取mysql

jmeter操作mysql 1.下載數據驅動&#xff0c;安裝數據驅動 &#xff08;1&#xff09;存放四個路徑 a.jre下的lib C:\Program Files\Java\jre1.8.0_60\lib &#xff08;2&#xff09;存放在jre 下的lib 中的ext 路徑&#xff1a; C:\Program Files\Java\jre1.8.0_60\lib\…

TDengine 中的保留關鍵詞

簡介 本節很重要&#xff0c;請大家收藏&#xff0c;避免在編寫程序的時候踩坑。因為關鍵字是被 TDengine 系統使用的&#xff0c;如果你在 SQL 中使用了保留關鍵詞&#xff0c;并且沒有被反引號包括時&#xff0c;會報語法錯誤&#xff0c;當你不知道這個是保留關鍵詞時&…

美攝科技開啟智能汽車車內互動及娛樂解決方案2.0

在科技飛速發展的今天&#xff0c;汽車已不再僅僅是簡單的代步工具&#xff0c;而是逐漸演變為集出行、娛樂、社交于一體的智能移動空間。美攝科技&#xff0c;作為前沿視覺技術與人工智能應用的領航者&#xff0c;憑借其卓越的技術實力和創新精神&#xff0c;攜手汽車行業&…

Postman CORS 測試完全指南:輕松模擬跨域請求,排查 CORS 相關問題

在使用 Postman 進行 API 測試時&#xff0c;通常不會遇到跨域問題&#xff0c;因為 Postman 是一個獨立的客戶端應用程序&#xff0c;不同于在瀏覽器中運行的 JavaScript 代碼&#xff0c;它沒有同源策略&#xff08;SOP&#xff09;的限制。跨域資源共享&#xff08;CORS&…

基于SpringBoot和Vue的SQL TO API平臺的設計與實現

文章目錄 前言一、系統功能模塊二、數據庫設計1. 實體屬性圖1. 實體屬性圖1.1 職員表1.2 數據源配置表1.3 接口配置表1.4 請求記錄表 2. E-R圖 三、系統實現1. 登錄頁面2. 職員管理頁面1.1 創建用戶1.2 編輯用戶 2. 數據源管理2.1 創建數據源2.2 編輯數據源 3. 接口管理3.1 創建…