91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

js循環(huán)結構注意事項

freeflydom
2025年6月4日 8:37 本文熱度 201

循環(huán)作為 算法與數(shù)據(jù)結構 中的基石,JS 與其他編程語言一樣,都提供了多種循環(huán)結構用于處理數(shù)據(jù)。

for 循環(huán)

事物的開端往往都是從最常用的開始,循環(huán)結構咱們從 for 循環(huán)說起。

語法:

for (初始化; 條件; 增量) {
  // ...
}

示例:

// 增量每次 +1
for (let i = 0; i < 10; i++) {
  console.log(i);
}
// 增量每次 +2
for (let i = 0; i < 10; i += 2) {
  console.log(i);
}

性能優(yōu)化:

在使用 for 循環(huán)遍歷數(shù)組的時候,可以提前緩存數(shù)組長度,減少 length 的訪問次數(shù)。

const arr = ['前', '端', '路', '引'];
// 提前使用 len 緩存數(shù)組長度
for (let i = 0, len = arr.length; i < len; i++) {
  console.log(arr[i]);
}

此示例中使用了 let 同時聲明了多個變量,在常規(guī)的代碼編寫中,不建議這么使用,但在循環(huán)體這種特殊情況下,這么寫也能接受。

// 同時聲明多個變量
let a = '前端路引', b = 2, c = true;

增量不一定要使用 i++ 自增,也可以使用 i-- 遞減,或者使用 i += 2 步進,甚至可以是 i += 10

for in 循環(huán)

ES6 規(guī)范出現(xiàn)之前,只能使用 for in 循環(huán)遍歷對象,但這哥們有個坑,不止會遍歷對象自身屬性,還能遍歷原型鏈上可枚舉屬性。

const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
for (let key in obj1) {
  console.log(key, obj1[key]);
}
/*
// 輸出結果
name 前端路引
age 1
favorite-color red
*/

看個遍歷原型鏈例子:

// 如果有兄弟不小心給對象的原型鏈上填了一筆
Object.prototype.test = '我是原型鏈上的測試屬性';
const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
for (let key in obj1) {
  console.log(key, obj1[key]);
}
/*
// 輸出結果
name 前端路引
age 1
favorite-color red
test 我是原型鏈上的測試屬性
*/
for (const key in obj1) {
  if (obj.hasOwnProperty(key)) {  // 過濾掉原型鏈屬性
    console.log(key, obj1[key]);
  }
}
/*
// 輸出結果
name 前端路引
age 1
favorite-color red
*/

如上所示,代碼編寫規(guī)范建議不要對 JS 自身的原型鏈做修改,擴展原型鏈雖然方便了一些對象操作,但實際上這是埋了雷的,不知道啥時候就會引爆!!

在使用 for in 循環(huán)也需要注意原型鏈的屬性,必須使用 hasOwnProperty 方法來過濾掉原型鏈上的屬性。

for of 循環(huán)

由于 for in 的各種弊端,后來定規(guī)范的大佬們,就新增了一個 for of 循環(huán)用于遍歷可迭代對象,比如:數(shù)組、字符串、Set、Map 等等。

const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
// for of 循環(huán)
for (let [key, value] of Object.entries(obj1)) {
  console.log(key, value);
}
/* // 以上 let [key, value] 使用了 解構賦值,其代碼等于
for (let item of Object.entries(obj1)) {
  const [key, value] = item;
  console.log(key, value);
}
// 又等于
for (let item of Object.entries(obj1)) {
  const key = item[0];
  const value = item[1];
  console.log(key, value);
}
*/

for of 無法直接遍歷對象,需要遍歷對象時,需使用內(nèi)置方法 Object.entries 將對象轉為數(shù)組,再使用 for of 遍歷,或者使用 Object.keys/Object.values 將對象轉為鍵/值數(shù)組再遍歷。

相比于 for in 循環(huán),for of 循環(huán)性能更好,也不用考慮原型鏈問題。

while 循環(huán)

while 循環(huán)多用于不確定循環(huán)次數(shù)的應用場景,比如讀取文件數(shù)據(jù)流,并不知道需要循環(huán)多少次才能讀取完。

let i = 0;
while (i < 3) {
  console.log(i);
  i++;
}

一般能用 for 循環(huán)的場景,都能使用 while 循環(huán)替代。

do while 循環(huán)

這個循環(huán)可有意思了,不管條件是否滿足,都會先跑一次循環(huán)體,再判斷條件。

應用場景例子:必須讓用戶先輸入,再判斷條件,直到輸入正確才繼續(xù)。

let userInput;
do {
  userInput = prompt("請輸入一個大于 10 的數(shù)字:");
} while (isNaN(userInput) || Number(userInput) <= 10);
console.log("有效輸入:", userInput);

死循環(huán)

在使用循環(huán)遍歷時候,需特別注意 死循環(huán) 問題,條件處理不好,就進入死循環(huán),導致程序崩潰。

比如:

let i = 0;
while (i < 3) {
  console.log(i);
  // i++; // 忘記修改 i 的值,導致進入死循環(huán)
}

善用退出循環(huán)

continue / break / return 三個關鍵字都可以用來處理循環(huán)邏輯,不同的是:

  • continue:跳過當前循環(huán),繼續(xù)下一次循環(huán)。
  • break:跳出當前循環(huán),不再繼續(xù)循環(huán)。
  • return:跳出當前函數(shù),不再繼續(xù)執(zhí)行。

continue 示例:

function loop1 () {
  for (let i = 0; i < 10; i++) {
    if (i % 2 === 0) {
      continue; // 跳過偶數(shù)次循環(huán),只輸出奇數(shù)次循環(huán)
    }
    console.log(i); // 輸出 1 3 5 7 9
  }
  console.log('循環(huán)結束'); // 會執(zhí)行
}
loop1()

break 示例:

function loop2 () {
  for (let i = 0; i < 10; i++) {
    if (i === 5) {
      break; // 在第 6 次循環(huán)退出
    }
    console.log(i); // 輸出 0 1 2 3 4
  }
  console.log('循環(huán)結束'); // 會執(zhí)行
}
loop2()

return 示例:

function loop3 () {
  for (let i = 0; i < 10; i++) {
    if (i === 5) {
      return; // 在第 6 次循環(huán)退出函數(shù),不會執(zhí)行循環(huán)體后面的代碼
    }
    console.log(i); // 輸出 0 1 2 3 4
  }
  console.log('循環(huán)結束'); // 此行代碼不會執(zhí)行
}
loop3()

三個退出循環(huán)關鍵字都可以用于所有的循環(huán)語句,不要局限于 for 循環(huán)~~

寫在最后

如果說算法是程序的靈魂,那么循環(huán)可以算是算法的基石,很多常見的算法都需要使用循環(huán)實現(xiàn),比如各種數(shù)組排序算法、查找算法、最短路徑算法等等。

循環(huán)是程序中的必修課,任何編程語言都有它的身影。

轉自https://www.cnblogs.com/linx/p/18908725


該文章在 2025/6/4 8:37:25 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 成人免费观看视频 | 日本成人精品一区 | 91干屁眼视频| 午夜性色福利影院 | 日本特黄特色 | 日韩午夜免费电影 | 国产美女视频福利 | 国产精品玖玖视频 | 日本乱伦中文自拍 | 日本aⅴ日 | 日韩欧美午夜视频 | 成人激情视频在线 | 国产高清在线看 | 成人免费播放 | 欧美性爱150p | 国产伊人| 加勒比综合精品 | 国产精品爽片 | 午夜理论片y | 国产亚a| 福利在线不卡一区 | 日本中文字幕免 | 午夜一级高清免费看 | 国内自拍网 | 日韩精品国产精品 | 理论片在人线免费 | 69午夜国产精品 | 日本免费一二 | 日本黄页网 | 91美女福利 | 日本高清视频 | 国产末成年呦交在线 | 午夜免费福利影院 | 日本va午| 国产亚洲一欧美 | 国产区免费视频 | 国产极品视| 中文字幕精品 | 国产日韩中文字幕 | 91国语自产拍在线 | 成人精品秘|