JavaScript 語句和函數

1. JavaScript 語句

1)if語句

if (condition) statement1 else statement2

這里的條件(condition)可以是任何表達式,并且求值結果不一定是布爾值。

ECMAScript會自動調用Boolean()函數將這個表達式的值轉換為布爾值。

如果條件求值為true,則執行語句statement1;如果條件求值為false,則執行語句statement2。

這里的語句可能是一行代碼,也可能是一個代碼塊(即包含在一對花括號中的多行代碼)。

連續使用多個if語句:

if (condition1) statement1 else if (condition2) statement2 else statement3

2)do-while語句

do-while語句是一種后測試循環語句,即循環體中的代碼執行后才會對退出條件進行求值。

換句話說,循環體內的代碼至少執行一次。

do-while的語法如下:

do {statement
} while (expression);

注意 后測試循環經常用于這種情形:循環體內代碼在退出前至少要執行一次。

3)while語句

while語句是一種先測試循環語句,即先檢測退出條件,再執行循環體內的代碼。

因此,while循環體內的代碼有可能不會執行。

while(expression) statement

4)for語句

for語句也是先測試語句,只不過增加了進入循環之前的初始化代碼,以及循環執行后要執行的表達式。

for (initialization; expression; post-loop-expression) statement

無法通過while循環實現的邏輯,同樣也無法使用for循環實現。因此for循環只是將循環相關的代碼封裝在了一起而已。

在for循環的初始化代碼中,其實是可以不使用變量聲明關鍵字的。不過,初始化定義的迭代器變量在循環執行完成后幾乎不可能再用到了。因此,最清晰的寫法是使用let聲明迭代器變量,這樣就可以將這個變量的作用域限定在循環中。

初始化、條件表達式和循環后表達式都不是必需的。因此,下面這種寫法可以創建一個無窮循環:

for (; ; ) { // 無窮循環doSomething();
}

如果只包含條件表達式,那么for循環實際上就變成了while循環:

let count = 10;
let i = 0;
for (; i < count; ) {console.log(i);i++;
}

5)for-in語句

for-in語句是一種嚴格的迭代語句,用于枚舉對象中的非符號鍵屬性,語法如下:

for (property in expression) statement

ECMAScript中對象的屬性是無序的,因此for-in語句不能保證返回對象屬性的順序。換句話說,所有可枚舉的屬性都會返回一次,但返回的順序可能會因瀏覽器而異。

如果for-in循環要迭代的變量是null或undefined,則不執行循環體。

6)for-of語句

for-of語句是一種嚴格的迭代語句,用于遍歷可迭代對象的元素,語法如下:

for (property of expression) statement

for-of循環會按照可迭代對象的next()方法產生值的順序迭代元素。

如果嘗試迭代的變量不支持迭代,則for-of語句會拋出錯誤。

7)標簽語句

標簽語句用于給語句加標簽,語法如下:

label: statement

下面是一個例子:

start: for (let i = 0; i < count; i++) {console.log(i);
}

在這個例子中,start是一個標簽,可以在后面通過break或continue語句引用。標簽語句的典型應用場景是嵌套循環。

8)break和continue語句

break和continue語句為執行循環代碼提供了更嚴格的控制手段。其中,break語句用于立即退出循環,強制執行循環后的下一條語句。而continue語句也用于立即退出循環,但會再次從循環頂部開始執行。

break和continue都可以與標簽語句一起使用,返回代碼中特定的位置。這通常是在嵌套循環中,如下面的例子所示:

let num = 0;
outermost:
for (let i = 0; i < 10; i++) {for (let j = 0; j < 10; j++) {if (i == 5 && j == 5) {break outermost;}num++;}
}
console.log(num); // 55

9)with語句

with語句的用途是將代碼作用域設置為特定的對象,其語法是:

with (expression) statement;

使用with語句的主要場景是針對一個對象反復操作,這時候將代碼作用域設置為該對象能提供便利,如下面的例子所示:

let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;

上面代碼中的每一行都用到了location對象。如果使用with語句,就可以少寫一些代碼:

with(location) {let qs = search.substring(1);let hostName = hostname;let url = href;
}

這里,with語句用于連接location對象。這意味著在這個語句內部,每個變量首先會被認為是一個局部變量。如果沒有找到該局部變量,則會搜索location對象,看它是否有一個同名的屬性。如果有,則該變量會被求值為location對象的屬性。

嚴格模式不允許使用with語句,否則會拋出錯誤。

警告 由于with語句影響性能且難于調試其中的代碼,通常不推薦在產品代碼中使用with語句。

10)switch語句

switch語句是與if語句緊密相關的一種流控制語句,從其他語言借鑒而來。ECMAScript中switch語句跟C語言中switch語句的語法非常相似,如下所示:

switch (expression) {case value1:statementbreak;case value2:statementbreak;case value3:statementbreak;case value4:statementbreak;default:statement
}

這里的每個case(條件/分支)相當于:“如果表達式等于后面的值,則執行下面的語句。”

break關鍵字會導致代碼執行跳出switch語句。如果沒有break,則代碼會繼續匹配下一個條件。

default關鍵字用于在任何條件都沒有滿足時指定默認執行的語句(相當于else語句)。

為避免不必要的條件判斷,最好給每個條件后面都加上break語句。如果確實需要連續匹配幾個條件,那么推薦寫個注釋表明是故意忽略了break。

雖然switch語句是從其他語言借鑒過來的,但ECMAScript為它賦予了一些獨有的特性。首先,switch語句可以用于所有數據類型(在很多語言中,它只能用于數值),因此可以使用字符串甚至對象。其次,條件的值不需要是常量,也可以是變量或表達式。

switch ("hello world") {case "hello" + " world":console.log("Greeting was found.");break;case "goodbye":console.log("Closing was found.");break;default:console.log("Unexpected message was found.");
}

注意 switch語句在比較每個條件的值時會使用全等操作符,因此不會強制轉換數據類型(比如,字符串"10"不等于數值10)。

2. JavaScript 函數

以下是函數的基本語法:

function functionName(arg0, arg1, ..., argN) {statements
}

可以通過函數名來調用函數,要傳給函數的參數放在括號里(如果有多個參數,則用逗號隔開)。

ECMAScript中的函數不需要指定是否返回值。任何函數在任何時間都可以使用return語句來返回函數的值,用法是后跟要返回的值。

要注意的是,只要碰到return語句,函數就會立即停止執行并退出。因此,return語句后面的代碼不會被執行。

return語句也可以不帶返回值。這時候,函數會立即停止執行并返回undefined。這種用法最常用于提前終止函數執行,并不是為了返回值。

注意 最佳實踐是函數要么返回值,要么不返回值。只在某個條件下返回值的函數會帶來麻煩,尤其是調試時。

嚴格模式對函數也有一些限制:

  • 函數不能以eval或arguments作為名稱;
  • 函數的參數不能叫eval或arguments;
  • 兩個命名參數不能擁有同一個名稱。

如果違反上述規則,則會導致語法錯誤,代碼也不會執行。

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

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

相關文章

代碼隨想錄刷題Day22

替換數字 這道題比較簡單&#xff0c;遇到字母就copy到新的字符數組&#xff0c;如果是遇到數字&#xff0c;就在新字符數組中加入number的字符串。代碼如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

邏輯回歸參數調優實戰指南

邏輯回歸的參數調節參數展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的學習中&#xff0c;我們…

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境&#xff1a;我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒&#xff1a; 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱&#xff0c;然后發送到我們的服務器獲取賬號。 升級…

unity avpro實現互動影游關鍵問題

創建視頻播放器?在Hierarchy面板中右鍵創建&#xff1a;Video > AVPro Video - MediaPlayer創建后會生成一個MediaPlayer對象&#xff0c;用于控制視頻播放添加視頻資源將視頻文件放入項目的StreamingAssets文件夾下在MediaPlayer組件的設置中選擇要播放的視頻文件在UI上顯…

【C找第一個只出現一次的字符】2022-8-18

緣由樣例通過&#xff0c;請問為什么錯了呢&#xff1f;(語言-c語言)-編程語言-CSDN問答 char str[100000];fgets(str, 100000, stdin);int a[26]{}, i, count 0;int len strlen(str);for (i 0; i<len; i) a[str[i] - a];for (i 0; i<len; i){if (a[str[i] - a] 1){…

MCP AI應用通信的底層機制

技術小館專注AI與Java領域的前沿技術知識庫 技術小館官網 在AI應用快速發展的今天&#xff0c;不同AI系統之間的高效通信成為技術架構的關鍵挑戰。MCP&#xff08;Model Context Protocol&#xff09;作為新一代AI應用通信協議&#xff0c;正在重新定義AI工具生態的構建方式。…

UI測試平臺TestComplete如何實現從Git到Jenkins的持續測試

還在為手動做UI測試又慢又累發愁&#xff1f;更頭痛的是&#xff0c;代碼改完還得等半天才能測&#xff0c;測完了結果又散得到處都是&#xff0c;根本看不清質量全貌?TestComplete幫你搞定&#xff1a;直接連上你的Git倉庫&#xff0c;代碼一有動靜就能感知。接著&#xff0c…

【Debian】4-?2 Gitea搭建

【Debian】4-?2 Gitea搭建一、準備工作二、創建 Gitea 用戶&#xff08;推薦&#xff09;三、下載并安裝 Gitea四、配置Gitea4-1 創建目錄結構4-2 創建配置目錄五、配置 Systemd 服務六、訪問 Gitea Web 界面七、小插曲一、準備工作 更新系統軟件為最新 sudo apt update &am…

【CDH × Docker】一次測試部署,N 次復用的環境鏡像方案

&#x1f680; 一次測試環境的探索&#xff1a;我如何將 CDH 集群打包成 Docker 鏡像&#xff0c;留給未來的自己 &#x1f9e9; 背景故事 最近在項目中&#xff0c;我們計劃上線一個基于 CDH&#xff08;Cloudera Distribution Hadoop&#xff09; 的大數據平臺。正式上生產環…

Java 日期時間格式化模式說明

Java 中日期時間格式化使用特定的模式字符串來定義輸出格式。以下是常見的格式化符號及其含義&#xff0c;適用于 SimpleDateFormat 和 DateTimeFormatter一、日期部分格式化符號符號含義示例y年 (Year)yyyy → 2023M月 (Month)MM → 09, MMM → Sep, MMMM → Septemberd月中的…

代碼隨想錄算法訓練營三十三天|動態規劃part06

LeetCode 322 零錢兌換 題目鏈接&#xff1a;322. 零錢兌換 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。 計算并返回可以湊成總金額所需的 最少的硬幣個數 。…

【大模型LLM】大模型訓練加速 - 梯度累積(Gradient Accumulation)原理詳解

梯度累積&#xff08;Gradient Accumulation&#xff09;原理詳解 梯度累積是一種在深度學習訓練中常用的技術&#xff0c;特別適用于顯存有限但希望使用較大批量大小&#xff08;batch size&#xff09;的情況。通過梯度累積&#xff0c;可以在不增加單個批次大小的情況下模擬…

【數據分享】各省文旅融合耦合協調度及原始數據(2012-2022)

數據介紹引言 文旅融合是推動區域經濟高質量發展、促進共同富裕的重要路徑。黨的二十大報告明確提出“推進文化和旅游深度融合發展”的戰略目標&#xff0c;文旅產業通過資源整合與業態創新&#xff0c;可顯著縮小城鄉、區域差距&#xff0c;提升物質與精神雙重福祉&#xff08…

Linux編程: 10、線程池與初識網絡編程

今天我計劃通過一個小型項目&#xff0c;系統講解線程池與網絡編程的核心原理及實踐。項目將圍繞 “利用線程池實現高并發網絡通信” 這一核心需求展開&#xff0c;具體設計如下&#xff1a; 為保證線程安全&#xff0c;線程池采用單例模式設計&#xff0c;確保全局唯一實例避…

藏云閣 Logo 庫(開源項目SVG/PNG高清Logo)

在日常技術方案設計、架構圖繪制或PPT制作中&#xff0c;常常會遇到一些問題&#xff0c;比如&#xff1a; 找不到統一風格的開源項目組件圖標&#xff0c;PPT中的logo五花八門下載的圖標分辨率不足&#xff0c;放大后模糊失真不同來源的圖標顏色風格沖突&#xff0c;破壞整體…

從0開始學習R語言--Day64--決策樹回歸

對于沒有特征或者說需要尋找另類關系的數據集&#xff0c;我們通常會用聚合或KNN近鄰的方法來分類&#xff0c;但這樣的分類或許在結果上是好的&#xff0c;但是解釋性并不好&#xff0c;有時候我們甚至能看到好的結果反直覺&#xff1b;而決策樹回歸做出的結果&#xff0c;由于…

B+樹高效實現與優化技巧

B樹的定義 一顆M階B樹T,滿足以下條件 每個結點至多擁有M課子樹 根結點至少擁有兩顆子樹 除了根結點以外,其余每個分支結點至少擁有M/2課子樹 所有的葉結點都在同一層上 有k棵子樹的分支結點則存在k-1個關鍵字,關鍵字按照遞增順序進行排序 關鍵字數量滿足 ceil( M/2 ) - 1 &…

Android 基礎入門學習目錄(持續更新)

四大組件 Activity&#xff1a; Service&#xff1a; BroadcastReceiver&#xff1a; ContentProvider&#xff1a; UI 與交互開發 常見的UI布局和UI控件 樣式與主題 Fragment Intent 數據存儲 自定義View和自定義Group 自定義View 自定義ViewGroup 事件分發 Key…

Linux移動大量文件命令

背景 使用 mv 命令報“/bin/mv: 參數列表過長”&#xff0c;也是第一遇到&#xff0c;查了一下&#xff0c;最后用rsync命令解決了。還好每臺服務器&#xff0c;都必裝rsync了&#xff0c;記錄如下。 命令 nohup rsync -av --remove-source-files --progress /public/tmp/video…

SQL中的HAVING用法

HAVING 是 SQL 中專門對 “分組之后的聚合結果” 再做篩選的子句。 它一般跟在 GROUP BY 后面&#xff0c;不能單獨使用&#xff0c;作用類似于分組版的 WHERE。? 1. 語法位置 SELECT 列1, 聚合函數(列2) AS 別名 FROM 表 GROUP BY 列1 HAVING 聚合條件; -- 這里寫對聚合…