JS分支和循環

程序的執行順序

在程序開發中,程序有三種不同的執行順序

1.順序執行

2.分支執行

3.循環執行

程序的代碼塊

  <script>//一個代碼塊{var num1=1var num2=2var num3=num1+num2}//一個休想var info={name:"chen",age:18}

1.if分支語句(單分支語句)

if(條件){

}

如果條件成立執行代碼塊

補充一:如果代碼塊中只有一句語句,可以省略大括號

補充二:if(...)語句會計算圓括號的表達式,并將結果轉換為布爾型(Boolean)

轉換規則和Boolean函數的規則一樣

數字0、空字符串“”、null、undefined和NaN都會被轉換成fasle

? 因為它們被稱為“假值”

其他值被轉換成true,所以它們被稱為“真值(truthy)”

2.if...else語句?

if(條件){}

else{}

3.if-else if-else語句

此結構能對多個條件進行判斷,一旦某個條件為真,就會執行對應的代碼塊。

?

javascript

let score = 85;if (score >= 90) {console.log("成績為 A");
} else if (score >= 80) {console.log("成績為 B");
} else if (score >= 70) {console.log("成績為 C");
} else if (score >= 60) {console.log("成績為 D");
} else {console.log("成績為 F");
}
// 輸出:成績為 B
?

執行流程

?
  • 先判斷?if?條件,若為?true,則執行對應的代碼塊,之后跳出整個?if?結構。
  • 若?if?條件為?false,就接著判斷第一個?else if?條件,若為?true?則執行其代碼塊并跳出。
  • 若所有?else if?條件都為?false,且存在?else?塊,就會執行?else?塊中的代碼。

?4.三元運算符?

基本語法

javascript

條件表達式 ? 表達式1 : 表達式2;
?

執行邏輯

?
  • 先對?條件表達式?進行求值。
  • 若結果為?true,則整個三元運算符返回?表達式1?的值。
  • 若結果為?false,則返回?表達式2?的值。

基礎示例

javascript

// 判斷一個數是奇數還是偶數
let num = 6;
let result = num % 2 === 0 ? "偶數" : "奇數";
console.log(result); // 輸出:偶數// 根據年齡判斷是否成年
let age = 17;
let isAdult = age >= 18 ? "已成年" : "未成年";
console.log(isAdult); // 輸出:未成年

嵌套使用

三元運算符可以嵌套使用,從而實現更復雜的條件判斷。

?

javascript

// 根據分數給出對應的等級
let score = 85;
let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F";console.log(grade); // 輸出:B

?

注意:雖然三元運算符嵌套能讓代碼更簡潔,但要是嵌套層次過多,代碼的可讀性就會變差。一般嵌套不要超過兩層。

?

    <script>//案例一:var num1=1var num2=2var result=num1>num2?num1:num2console.log(result)//案例二:給變量賦一個默認值var info={name:"chen"}var obj=info?info:{}console.log(obj)//案例三:讓用戶輸入一個年齡,判斷是否是成年人var age=prompt("請輸入你的年齡")age=Number(age)// if(age>=18){//   alert("成年人")// }else{//   alert("未成年人")// }var message=alert(age>=18?"成年人":"未成年人")</script>

?

5.邏輯運算符?

1. 邏輯與(&&

語法表達式1 && 表達式2
執行規則

  • 若?表達式1?的值為?false,則直接返回?表達式1?的值,不會對?表達式2?進行計算。
  • 若?表達式1?的值為?true,則返回?表達式2?的值。

示例

javascript

console.log(true && true);   // 輸出:true
console.log(true && false);  // 輸出:false
console.log(false && true);  // 輸出:false(短路求值)
console.log(false && 0);     // 輸出:false(不會計算0)// 非布爾值的情況
console.log(5 && "hello");   // 輸出:"hello"
console.log(null && "test"); // 輸出:null(短路求值)

常見用途

  • 條件判斷:檢查多個條件是否同時成立。

    javascript

    const age = 25;
    const hasLicense = true;
    if (age >= 18 && hasLicense) {console.log("可以開車"); // 會執行
    }
    
  • 短路求值:避免在條件不滿足時執行某些操作。

    javascript

    const user = { name: "張三" };
    // 若user存在才訪問name屬性
    console.log(user && user.name); // 輸出:"張三"
    

2. 邏輯或(||

語法表達式1 || 表達式2
執行規則

  • 若?表達式1?的值為?true,則直接返回?表達式1?的值,不計算?表達式2
  • 若?表達式1?的值為?false,則返回?表達式2?的值。

示例

javascript

console.log(true || true);   // 輸出:true(短路求值)
console.log(true || false);  // 輸出:true(短路求值)
console.log(false || true);  // 輸出:true
console.log(false || 0);     // 輸出:0// 非布爾值的情況
console.log("" || "默認值");  // 輸出:"默認值"
console.log(0 || null);      // 輸出:null

常見用途

  • 設置默認值:當變量的值為假值(如?nullundefined)時,使用默認值。

    javascript

    const username = null;
    const displayName = username || "訪客";
    console.log(displayName); // 輸出:"訪客"
    
  • 多重條件檢查:只要有一個條件滿足即可。

    javascript

    const day = "周六";
    if (day === "周六" || day === "周日") {console.log("周末愉快"); // 會執行
    }
    

3. 邏輯非(!

語法!表達式
執行規則

  • 對?表達式?的值進行取反操作,將其轉換為布爾值后再取反。

示例

javascript

console.log(!true);    // 輸出:false
console.log(!false);   // 輸出:true
console.log(!0);       // 輸出:true(0被視為false)
console.log(!"");      // 輸出:true(空字符串被視為false)
console.log(!null);    // 輸出:true
console.log(!undefined); // 輸出:true
console.log(!5);       // 輸出:false(非零數字被視為true)
console.log(!"hello"); // 輸出:false

常見用途

  • 條件取反:反轉某個條件的判斷結果。

    javascript

    const isLoggedIn = false;
    if (!isLoggedIn) {console.log("請先登錄"); // 會執行
    }
    
  • 強制轉換為布爾值:使用兩個?!!?可以將值強制轉換為布爾類型。

    javascript

    console.log(!!"hello"); // 輸出:true
    console.log(!!0);      // 輸出:false
    

4. 優先級與結合性

  • 優先級!?的優先級高于?&&&&?的優先級高于?||

    javascript

    // 等價于 (true && false) || true
    console.log(true && false || true); // 輸出:true
    
  • 結合性&&?和?||?都是左結合的,即從左到右進行計算。

    javascript

    // 等價于 ((a && b) && c)
    a && b && c;
    

5. 短路求值(Short-circuit Evaluation)

邏輯與(&&)和邏輯或(||)都具有短路特性,即一旦結果確定,就不再計算后續表達式。

  • &&?的短路:若左側為?false,右側表達式不會執行。

    javascript

    let x = 5;
    false && (x = 10);
    console.log(x); // 輸出:5(右側賦值未執行)
    
  • ||?的短路:若左側為?true,右側表達式不會執行。

    javascript

    let y = 3;
    true || (y = 7);
    console.log(y); // 輸出:3(右側賦值未執行)
    

6. 實際應用示例

javascript

// 示例1:檢查對象屬性是否存在并使用
const user = { profile: { email: "test@example.com" } 
};// 安全訪問嵌套屬性
const email = user && user.profile && user.profile.email;
console.log(email); // 輸出:"test@example.com"// 示例2:函數參數的默認值(ES5方式)
function greet(name) {name = name || "朋友"; // 若name為假值,則使用默認值console.log(`你好,${name}!`);
}greet();        // 輸出:"你好,朋友!"
greet("張三");  // 輸出:"你好,張三!"

7. 注意事項

  • 非布爾值的處理:邏輯運算符會將操作數轉換為布爾值進行計算,但返回的是原始值,而非布爾值。

    javascript

    console.log(5 || 10); // 輸出:5(而非true)
    
  • 與位運算符的區別:邏輯運算符(&&||)處理的是布爾值,而位運算符(&|)處理的是二進制位。

    javascript

    // 邏輯與
    console.log(true && false); // 輸出:false// 位與(將值轉換為32位整數后按位與)
    console.log(5 & 3); // 輸出:1(二進制:0101 & 0011 = 0001)
    

掌握這些邏輯運算符的使用方法后,你就能在 JavaScript 中構建更復雜、更靈活的條件表達式了。

?閱讀文章(邏輯或本質/邏輯與本質)的前提說明:注意在文章下面提到的運算元不是一個單個的運算元,是一整個表達式(||的左面或者右面的表達式)

5.1邏輯或的本質?

||(或)兩個豎線符號表示“或”運算符(也成為短路或)

result=a||b

從左到右依次計算操作符

處理每一個操作數的時候,都將其轉化成布爾值(Boolean)

如果結果是true,就停止計算,返回這個操作數的初始值

如果所有的操作數都被計算過(也就是,轉換結果都是false),則返回最后一個操作數

    <script>//脫離分支語句,單獨使用邏輯或/*1.先將運算元轉換成Booleanleix2.對轉成的boolean類型進行判斷如果為true,直接將結果(元類型)返回如果為false,進行第二個運算元的判斷以此類推3.如果找到最后,也沒有找到,那么返回最后一個運算元*///本質推導一:之前的多條件是如何進行判斷的var chineseScore=95var mathScore=90//chineseScore>90 為true ,那么后續的條件都不會進行判斷if(chineseScore>90|| mathScore>90){}//本質推導二:獲取第一個有值的結果var info="abc"var obj={name:"chen"}var message=info||obj||"我是默認值"console.log(message.length)</script>

?5.2邏輯與的本質

    <script>// 運算元1&&運算元2&&運算元3/*也可以脫離條件判斷來使用邏輯與的本質1.拿到第一個運算元,將運算元轉成Booleanleix2.對運算元的Boolean類型進行判斷如果false,返回運算元(原始值)如果true,查找下一個繼續來運算以此類推3.如果查找了所有的都為true,那么返回最后一個運算元(原始值)*///  本質推導一:邏輯與,稱之為短路與var chineseScore=95var mathScore=99if(chineseScore>90&&mathScore>90){}//本質推導二:對一些屬性(對象中的方法)進行有值判斷var obj={name:"chen",friend:{name:"wei",eating:function(){console.log("eat something")}}}//調用eating函數//obj.friend.eating()obj&&obj.friend&&obj.friend&&obj.friend.eating&&obj.friend.eating()</script>

5.3邏輯非的補充?

邏輯非運算符接收一個參數,并且按照如下進行運算:

步驟一:將操作數轉化為布爾類型:true/false

步驟二:返回相反的值

兩個非運算!!有時候用來將某個值轉化為布爾類型

也就是,第一個非運算將該值轉化為布爾類型并且取反,第二個非運算再次取反

最后我們就得到了一個任意值到布爾值的轉化

    <script>var message="Hello World"//console.log(Boolean(message))// 將一個值轉化為布爾值的另一個做法console.log(!!message)</script>

6.switch語句?

?switch是分支結構的一種語句:

它是通過判斷表達式的結果(或者變量)是否等于case語句的常量,來執行相應的分支體的

與if語句不同的是,switch語句只能做值的相等判斷(使用全等運算符===),而if語句可以做值的范圍判斷;

switch的語法:

switch語句有至少一個case代碼塊和一個可選的default代碼塊

switch(變量){

? case 常量1:

? //語句一

? break

? case 常量2:

? //語句二

? break

? default:

? //語句三

}

switch語句的補充

case穿透問題:

一條case語句結束后,會自動執行下一個case的語句

這種現象被稱之為case穿透

break關鍵字

通過在每個case的代碼塊后添加break關鍵字來解決這個問題

注意事項:這里的相等是嚴格相等

被比較的值必須是相同的類型才能進行匹配?

    <script>//案例//上一首的按鈕:0//播放/暫停的按鈕:1//下一首的按鈕:2// var btnIndex=0// if(btnIndex === 0){//   console.log("點擊了上一首")// }else if(btnIndex===1){//   console.log("點擊了播放/暫停")// }else if(btnIndex===2){//   console.log("點擊了下一首")// }else{//   console.log("當前按鈕的索引有問題")// }//默認情況下是由case穿透的:使用break解決這個問題switch(btnIndex){case 0:console.log("點擊了上一首")breakcase 1:console.log("點擊了播放暫停")breakcase 3:console.log("點擊了下一首")breakdefault:console.log("當前按鈕的索引有問題")}</script>

?

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

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

相關文章

Android 開發 Kotlin 全局大喇叭與廣播機制

在 Android 開發中&#xff0c;廣播機制就像一個神通廣大的 “消息快遞員”&#xff0c;承擔著在不同組件間傳遞信息的重任。Kotlin 語言的簡潔優雅更使其在廣播機制的應用中大放異彩。今天&#xff0c;就讓我們一同深入探索 Android 開發中 Kotlin 全局大喇叭與廣播機制的奧秘…

rabbitmq AI復習

RabbitMq rabbitmq &#x1f9d1;?&#x1f4bb; User 幫我復習rabbitmq相關知識&#xff0c;我是一個經驗豐富的程序員 &#x1f916; Assistant 好的&#xff01;很高興能通過這種方式幫你復習或學習 RabbitMQ 的知識。按照你說的流程&#xff0c;我們從完全零基礎開始&…

計算機視覺---YOLOv5

YOLOv5理論講解 一、YOLOv5 整體架構解析 YOLOv5 延續了 YOLO 系列的 單階段目標檢測框架&#xff0c;包含 主干網絡&#xff08;Backbone&#xff09;、頸部網絡&#xff08;Neck&#xff09; 和 檢測頭&#xff08;Head&#xff09;&#xff0c;但在結構設計上更注重 輕量化…

C++多重繼承詳解與實戰解析

#include <iostream> using namespace std; //基類&#xff0c;父類 class ClassA { public:void displayA() {std::cout << "Displaying ClassA" << std::endl;}void testFunc(){std::cout << "testFunc ClassA" << std::e…

單細胞注釋前沿:CASSIA——無參考、可解釋、自動化細胞注釋的大語言模型

細胞類型注釋是單細胞RNA-seq分析的重要步驟&#xff0c;目前有許多注釋方法。大多數注釋方法都需要計算和特定領域專業知識的結合&#xff0c;而且經常產生不一致的結果&#xff0c;難以解釋。大語言模型有可能在減少人工輸入和提高準確性的同時擴大可訪問性&#xff0c;但現有…

STM32Cubemx-H7-17-麥克納姆輪驅動

前言 --末尾右總體的.c和.h 本篇文章把麥克納姆輪的代碼封裝到.c和.h&#xff0c;使用者只需要根據輪子正轉的方向&#xff0c;在.h處修改定義方向引腳&#xff0c;把輪子都統一正向后&#xff0c;后面的輪子驅動就可以正常了&#xff0c;然后直接調用函數驅動即可。 設置滿…

文檔核心結構優化(程序C++...)

文檔核心結構優化 一、文檔核心結構優化二、C關鍵特性詳解框架2.1 從C到C的范式遷移 三、深度代碼解析模板3.1 現代C特性分層解析 四、C vs C 關鍵差異矩陣五、交互式文檔設計策略5.1 三維學習路徑5.2 代碼缺陷互動區 六、現代C特性演進圖七、性能優化可視化呈現&#xff08;深…

PyTorch ——torchvision數據集使用

如果下載的很慢&#xff0c;可以試試下面這個

純前端實現圖片偽3D視差效果

作者&#xff1a;vivo 互聯網前端團隊- Su Ning 本文通過depth-anything獲取圖片的深度圖&#xff0c;同時基于pixi.js&#xff0c;通過著色器編程&#xff0c;實現了通過深度圖驅動的偽3D效果。該方案支持鼠標/手勢與手機陀螺儀雙模式交互&#xff0c;在保證性能的同時&#x…

英語寫作中“專注于”focus on、concentrate的用法

Focus on在論文寫作中常用&#xff0c;指出研究點&#xff0c;例如&#xff1a; There are three approaches to achieving ID authentication. Our study will focus on ……&#xff08;有三種途徑實現身份認證&#xff0c;我們的研究專注于……&#xff09; concentrate &…

go環境配置

下載對應版本的 go 版本 https://go.dev/dl/ 配置 vim ~/.zshrc export GOROOT/usr/local/go export PATH$PATH:$GOROOT/binsource ~/.zshrc >>>>>> go versiongoland 配置&#xff1a; &#x1f50d; 一、什么是GOPATH&#xff1f; GOPATH 是舊的項目結…

AI Agent智能體:底層邏輯、原理與大模型關系深度解析·優雅草卓伊凡

AI Agent智能體&#xff1a;底層邏輯、原理與大模型關系深度解析優雅草卓伊凡 一、AI Agent的底層架構與核心原理 1.1 AI Agent的基本構成要素 AI Agent&#xff08;人工智能代理&#xff09;是一種能夠感知環境、自主決策并執行行動的智能系統。其核心架構包含以下關鍵組件…

【手搓一個原生全局loading組件解決頁面閃爍問題】

頁面閃爍效果1 頁面閃爍效果2 封裝一個全局loading組件 class GlobalLoading extends HTMLElement {constructor() {super();this.attachShadow({ mode: open });}connectedCallback() {this.render();this.init();}render() {this.shadowRoot.innerHTML <style>.load…

unix/linux source 命令,其高級使用

就像在物理學中,掌握了基本定律后,我們可以開始研究更復雜的系統和現象,source 的高級用法也是建立在對其基本行為深刻理解之上的。 讓我們一起探索 source 的高級應用領域: 1. 條件化加載 (Conditional Sourcing) 根據某些條件來決定是否 source 一個文件,或者 source…

DexGarmentLab 論文翻譯

單個 專家 演示 裝扮 15 任務 場景 2500+ 服裝 手套 棒球帽 褲子 圍巾 碗 帽子 上衣 外套 服裝-手部交互 捕捉 搖籃 夾緊 平滑 任務 ...... 投擲 懸掛 折疊 ... 多樣化位置 ... 多樣化 變形 ... 多樣化服裝形狀 類別級 一般化 類別級(有或沒有變形) 服裝具有相同結構 變形 生…

WPF-Prism學習筆記之 “導航功能和依賴注入“

新建空白模板(Prism) 新建好后會有自動創建ViewModels和Views 在"MainWindow.xaml"文件里面標題去綁定了一個屬性"Title"&#xff0c;而"MainWindowViewModel.cs"里面繼承一個非常重要的"BindbleBase"(prism框架里面非常重要的)。所以…

《C++初階之入門基礎》【C++的前世今生】

【C的前世今生】目錄 前言&#xff1a;---------------起源---------------一、歷史背景二、橫空出世---------------發展---------------三、標準立世C98&#xff1a;首個國際標準版本C03&#xff1a;小修訂版本 四、現代進化C11&#xff1a;現代C的開端C14&#xff1a;對C11的…

YOLOv5-入門篇筆記

1.創建環境 conda create -n yolvo5 python3.8 去pytorch.org下載1.8.2的版本。 pip --default-timeout1688 install torch1.8.2 torchvision0.9.2 torchaudio0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111 github上下載yolov5的zip pip --def…

【PostgreSQL 03】PostGIS空間數據深度實戰:從地圖服務到智慧城市

PostGIS空間數據深度實戰&#xff1a;從地圖服務到智慧城市 關鍵詞 PostGIS, 空間數據庫, 地理信息系統, GIS, 空間查詢, 地理分析, 位置服務, 智慧城市, 空間索引, 坐標系統 摘要 PostGIS是PostgreSQL的空間數據擴展&#xff0c;它將普通的關系數據庫轉變為強大的地理信息系統…

科技修真的解決方案

“科技修真”是一個結合現代科技與修真&#xff08;玄幻&#xff09;元素的創新概念&#xff0c;通常出現在科幻或玄幻文學作品中&#xff0c;但也可能指代現實中的科技與傳統文化、超自然理念的融合探索。以下是幾種可能的“科技修真”方案&#xff0c;涵蓋技術實現、文化融合…