国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

能運行,不代表它是對的:五個潛伏在正常功能下的 JavaScript 錯誤

開發(fā) 前端
JavaScript 是一門看似簡單實則充滿細節(jié)的語言,當我們開始對這些“小問題”變得敏感時,代碼質(zhì)量和開發(fā)效率必將邁上一個新的臺階。

JavaScript 的動態(tài)性和復(fù)雜性意味著,代碼雖然表面上正常運行,但一些深層次、隱蔽的陷阱往往讓人意想不到,梳理了幾個 JavaScript 開發(fā)中難以發(fā)現(xiàn)的隱蔽錯誤,旨在幫助我們寫出更健壯、更可預(yù)測的代碼。

來看下那些潛伏在代碼中的“惡魔細節(jié)”。

1. async/await 的隱式陷阱:忘記 try...catch

async/await 極大地改善了異步代碼的可讀性,但它也帶來了一個隱蔽的風險:未被捕獲的 Promise reject 會變成一個靜默的、未處理的異常。

錯誤場景:

async function fetchData() {
  // 如果 API 返回 404 或 500,這個 Promise 會被 reject
  const data = await fetch('https://api.example.com/data');
  console.log('數(shù)據(jù)處理完成', data); // 這一行永遠不會執(zhí)行
}

// 調(diào)用函數(shù),但沒有處理潛在的錯誤
fetchData(); 
console.log('程序繼續(xù)執(zhí)行'); // 程序會繼續(xù),但錯誤被“吞掉”了

問題根源:await 只是一個語法糖,它會暫停 async 函數(shù)的執(zhí)行,等待 Promise 解決。如果 Promise被 reject,await 會將其作為異常拋出。如果沒有 try...catch 塊來捕獲這個異常,它就會沿著調(diào)用棧向上傳播,最終成為一個 unhandledrejection。

正確姿勢:始終用 try...catch 包裹 await 表達式,或者在調(diào)用鏈的更高層級進行捕獲。

async function fetchData() {
 try {
    const response = await fetch('https://api.example.com/data');
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const data = await response.json();
    console.log('數(shù)據(jù)處理完成', data);
  } catch (error) {
    console.error('獲取數(shù)據(jù)失敗:', error);
  }
}

fetchData();

2. Promise.all 的“一榮俱榮,一損俱損”

當需要并行處理多個 Promise 時,Promise.all 是首選。但高手有時會忘記它的“快速失敗”(Fail-Fast)特性。

錯誤場景:假設(shè)我們需要獲取用戶詳情和他的帖子列表,即使獲取帖子失敗,也希望看到用戶詳情。

async function getUserProfile(userId) {
  try {
    const [user, posts] = await Promise.all([
      api.fetchUser(userId),       // 這個成功了
      api.fetchPosts(userId)       // 但這個因為網(wǎng)絡(luò)問題失敗了
    ]);
    renderProfile(user, posts);
  } catch (error) {
    // 整個 block 都失敗了,我們連 user 數(shù)據(jù)都拿不到
    console.error('獲取用戶 Profile 失敗', error);
  }
}

問題根源:Promise.all 的設(shè)計是,只要其中任何一個 Promise被 reject,整個 Promise.all 就會立即 reject,并返回那個失敗的原因,而不會等待其他 Promise 完成。

正確姿勢:使用 Promise.allSettled。它會等待所有 Promise 都有結(jié)果(無論是 fulfilled 還是 rejected),然后返回一個包含每個 Promise 狀態(tài)和結(jié)果(或原因)的對象數(shù)組。

async function getUserProfile(userId) {
 const results = await Promise.allSettled([
    api.fetchUser(userId),
    api.fetchPosts(userId)
  ]);

 const userResult = results[0];
 const postsResult = results[1];

 if (userResult.status === 'fulfilled') {
    // 即使帖子失敗,我們依然可以渲染用戶信息
    renderUser(userResult.value);
  } else {
    console.error('獲取用戶失敗:', userResult.reason);
  }

 if (postsResult.status === 'fulfilled') {
    renderPosts(postsResult.value);
  } else {
    console.error('獲取帖子失敗:', postsResult.reason);
  }
}

3. 數(shù)組迭代中的意外突變

在 forEach 或 for...of 循環(huán)中直接修改(增加或刪除)數(shù)組本身,是導(dǎo)致不可預(yù)測行為的常見原因。

錯誤場景:從數(shù)組中移除所有偶數(shù)。

問題根源:當你使用 splice 刪除一個元素時,數(shù)組的長度和后續(xù)元素的索引都會發(fā)生變化。但 forEach 的迭代過程并不會根據(jù)這個變化來調(diào)整它的內(nèi)部計數(shù)器,導(dǎo)致它跳過緊跟在被刪除元素后面的那個元素。

正確姿勢:不要在迭代中修改原數(shù)組。最好的方法是創(chuàng)建一個新數(shù)組。

如果確實需要在原地修改,請使用反向循環(huán)。

4. 閉包的記憶陷阱與內(nèi)存泄漏

閉包是 JavaScript 的強大特性,但也是內(nèi)存泄漏的主要來源之一,尤其是在處理 DOM 事件監(jiān)聽時。

錯誤場景:

問題根源:即使 element 從 DOM 中移除,只要事件監(jiān)聽器沒有被顯式地移除(removeEventListener),這個監(jiān)聽器(閉包)就依然存在,并且它會一直引用著 heavyObject。這導(dǎo)致 heavyObject 和 element 都無法被垃圾回收器回收。

正確姿勢:在組件卸載或元素銷毀時,務(wù)必清理事件監(jiān)聽器。

5. 對象的深拷貝與淺拷貝之謎

這是一個永恒的話題。即使是資深開發(fā)者,也可能在不經(jīng)意間對嵌套對象進行了淺拷貝,導(dǎo)致了意想不到的副作用。

錯誤場景:

問題根源:Object.assign() 和展開語法 ... 都只執(zhí)行淺拷貝。它們會創(chuàng)建一個新的頂層對象,但如果屬性值是對象或數(shù)組,它們只會復(fù)制引用,而不是值。

正確姿勢:對于深層嵌套的對象,需要使用深拷貝,關(guān)于深拷貝可參考前文《一行代碼實現(xiàn)深拷貝?別再用 JSON.stringify 了!》。

簡單場景 (無函數(shù)、undefined、Symbol等):const deepCopiedProfile = structuredClone(userProfile); // JSON.parse(JSON.stringify(userProfile));

復(fù)雜場景: 使用成熟的庫,如 Lodash 的 _.cloneDeep()。

JavaScript 是一門看似簡單實則充滿細節(jié)的語言,當我們開始對這些“小問題”變得敏感時,代碼質(zhì)量和開發(fā)效率必將邁上一個新的臺階。

責任編輯:趙寧寧 來源: JavaScript
相關(guān)推薦

2011-09-28 09:42:44

2015-09-08 13:24:17

2021-06-16 15:04:06

JavaScript內(nèi)存開發(fā)

2021-12-30 21:51:10

JavaScript開發(fā)內(nèi)存

2009-06-30 09:40:00

2010-09-07 09:21:37

2019-03-17 15:14:00

WiFi數(shù)據(jù)泄露黑產(chǎn)

2022-11-17 08:00:18

JavaScript錯誤性能

2022-12-15 08:00:38

JavaScript錯誤性能

2017-12-21 09:29:47

網(wǎng)絡(luò)運行實踐

2022-04-13 16:25:57

勒索軟件網(wǎng)絡(luò)攻擊

2013-07-22 14:58:53

2011-08-19 17:18:22

2022-03-10 09:11:33

JavaScrip開發(fā)JSON

2019-10-14 16:39:50

云計算配置錯誤企業(yè)

2024-07-17 13:43:04

2015-11-03 08:51:21

程序員怪物

2009-07-09 17:47:40

使用JDBC

2023-08-18 15:12:00

JavaScript開發(fā)

2023-04-17 16:21:20

JavaScriot前端開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

日本精品在线观看| 永久亚洲成a人片777777| 亚洲一区二区精品视频| 777av视频| 免费在线播放第一区高清av| 国产91成人video| 久久wwww| 久久精品视频va| 久久精品女人天堂av免费观看| 欧美美女喷水视频| 国产视频精选在线| 精品久久久国产精品999| 国产小视频精品| 94色蜜桃网一区二区三区| 久草免费福利在线| 成人午夜看片网址| 少妇高潮喷水久久久久久久久久| 波多野结衣在线一区| 霍思燕三级露全乳照| 99精品视频在线播放观看| 无码精品a∨在线观看中文| 91丨九色丨黑人外教| 国产美女三级视频| 国产精品萝li| 九色视频网站入口| 亚洲成在线观看| 久蕉依人在线视频| 欧美日韩精品三区| 欧美1234区| 中文字幕欧美日韩va免费视频| 国产一区高清| 97香蕉超级碰碰久久免费软件 | 成人日韩av在线| 欧美影视一区| 欧美系列一区| 国产福利一区二区三区视频| 久久精品国产精品亚洲色婷婷| 欧美激情在线看| 中日韩免费毛片| 日韩一区二区在线观看视频| 亚洲一二三四| 2021国产精品视频| 欧美色图麻豆| 国产专区在线视频| 亚洲免费观看高清| av中文字幕在线| 亚洲系列中文字幕| 亚州综合一区| 国产精品免费区二区三区观看| 美女网站在线免费欧美精品| 日本www高清视频| 色综合天天综合狠狠| 182在线视频观看| 欧美激情a在线| 亚洲国产国产亚洲一二三| 成人一区二区av| 午夜激情久久久| 周于希免费高清在线观看| 91精品国产高清久久久久久91 | 日本久久久久久久久| 好看的亚洲午夜视频在线| 激情图片qvod| 午夜视频久久久久久| 美女高潮在线观看| 国产91在线播放九色快色| 视频一区在线视频| 97看剧电视剧大全| 日韩av在线一区二区| 日韩欧美在线精品| 亚洲福利av在线| 亚洲男同1069视频| 日韩欧美精品一区二区三区| 日韩av男人的天堂| 久久精品国产精品亚洲红杏| 日本调教视频在线观看| 日韩精品在线观| 日韩久久久久| 国产极品尤物在线| 欧美中文字幕一二三区视频| 国产aa精品| 欧美一级爽aaaaa大片| 一区免费观看视频| 亚洲天堂资源| 国产日韩欧美一区二区三区四区| 国产午夜精品一区二区三区视频| 午夜国产福利在线| 国产精品成人免费电影| 成人黄色在线网站| 少女频道在线观看高清| 国产精品入口免费视| 99国产精品久久| 特级毛片在线| 亚洲a区在线视频| 国产欧美日韩三级| 国产精品专区免费| 日韩.欧美.亚洲| 欧美少妇bbb| 久久久久国产精品| 国产视频一二三区| 日韩在线观看免费高清| 美女一区二区视频| 免费av在线网址| 99国产超薄肉色丝袜交足的后果 | 欧美日韩国产首页| 教室别恋欧美无删减版| 久久黄色免费看| 亚洲最新中文字幕| 蜜桃久久精品一区二区| 99中文字幕一区| 97视频中文字幕| 亚洲国产精品久久不卡毛片| 加勒比视频一区| 三年中国国语在线播放免费| 中文字幕日韩欧美| 国产不卡高清在线观看视频| av在线加勒比| 曰韩不卡视频| 日韩电影网在线| 激情欧美一区二区三区在线观看| a视频在线免费看| 老牛影视免费一区二区| 91久久免费观看| 91精品国产麻豆国产在线观看| www成人免费观看网站| 欧美国产乱视频| 久久亚洲一区二区三区明星换脸 | 中文字幕精品av| 丁香激情综合国产| 人人精品久久| 精品久久久久久无码中文野结衣| 日韩av在线影院| 国内精品久久久久影院薰衣草| 51漫画成人app入口| dy888午夜| 色偷偷偷综合中文字幕;dd| 丁香天五香天堂综合| 99只有精品| 天堂社区在线视频| 国产99在线|中文| 一道本成人在线| 久久精品综合| 日韩a**中文字幕| 免费日韩视频在线观看| 欧美多人乱p欧美4p久久| 中文字幕一区二区日韩精品绯色| 欧美**vk| 91在线高清| 大桥未久一区二区三区| 在线免费看av不卡| 国产精品久久久久永久免费观看| 国产一区二区亚洲| 99中文字幕一区| 一级全黄肉体裸体全过程| 久久久91精品国产| 亚洲午夜免费福利视频| 亚洲先锋成人| 高清不卡av| 91在线观看入口| 国产伦精品一区二区三区| 日韩欧美成人一区| 99久久综合99久久综合网站| 香蕉人人精品| 高潮毛片在线观看| 日本在线xxx| 日韩美女毛茸茸| 91精品国产免费| 91在线免费视频观看| 成人在线免费视频观看| 成码无人av片在线观看网站| 少妇人妻在线视频| 国产精品青青在线观看爽香蕉 | 欧美人与性动交| 欧美日韩另类在线| 美女精品一区二区| 中文字幕区一区二区三| 新欧美整片sss第一页| 一级日韩一区在线观看| 欧美国产亚洲精品久久久8v| 一本大道久久a久久精二百| 国产一区二区网址| 国产亚洲欧美日韩在线观看一区二区| gogo在线观看| 色成人亚洲网| 午夜精品短视频| 欧美一区二区.| 亚洲国产精品yw在线观看| 中文字幕一区二区三区av | 成人精品一二区| 一本色道久久88综合日韩精品| 樱花草国产18久久久久| 国产精品婷婷| 欧美福利在线播放网址导航| 国产传媒在线播放| a视频免费看| 欧美一级中文字幕| 51国偷自产一区二区三区| 久久精品成人动漫| 日韩亚洲欧美在线观看| 亚洲一区二区三区不卡国产欧美| 国产aⅴ综合色|