成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 開發(fā)中常見錯(cuò)誤解決小總結(jié)

開發(fā) 前端
本文就來介紹在 Chrome 開發(fā)者工具中常見的錯(cuò)誤反饋及排除技巧,讓你不再為了滿屏幕的紅字感到挫折,更能從中學(xué)習(xí)如何快速搜尋錯(cuò)誤代碼。

身為一名前端打工人,當(dāng)然是經(jīng)驗(yàn)越多,在排查錯(cuò)誤時(shí)會(huì)更容易。道理都懂,但仍然會(huì)在遇到問題時(shí)會(huì)不知道怎樣著手。

Chrome DevTools 中的常見錯(cuò)誤排查

Chrome 開發(fā)者工具的 Console 相當(dāng)好用,最常使用的不外乎是通過 console.log展示出變量或運(yùn)算的結(jié)果,如果符合預(yù)期則皆大歡喜。

但是一旦出現(xiàn)紅字幸災(zāi)樂禍的告訴我們“你出錯(cuò)了!”,這對我們來說無疑是一種挫折,在不知如何著手解決錯(cuò)誤的時(shí),只能反覆地檢查自己的代碼,看看是不是有什么奇怪的地方,有時(shí)就算停在了錯(cuò)誤地方也往往不知是什么意思,會(huì)因此花費(fèi)大量的時(shí)間。

本文就來介紹在 Chrome 開發(fā)者工具中常見的錯(cuò)誤反饋及排除技巧,讓你不再為了滿屏幕的紅字感到挫折,更能從中學(xué)習(xí)如何快速搜尋錯(cuò)誤代碼。

注意:JavaScript 是屬于同步的編程語言,如果出現(xiàn)錯(cuò)誤就會(huì)造成后面的代碼無法運(yùn)行,當(dāng)紅字沒有解決時(shí),都有可能造成接下來的代碼行錯(cuò)誤或是無法繼續(xù)運(yùn)行。

錯(cuò)誤類型:SyntaxError

SyntaxError 類型的錯(cuò)誤通常是語法錯(cuò)誤,遇到這中錯(cuò)誤時(shí)建議通過你所用的 IDE 排查,比如 VSCode 能夠直接跳出這類型的錯(cuò)誤提示。

如下圖,VSCode 用紅色波浪線提示 family 對象有錯(cuò)誤,當(dāng)出現(xiàn)錯(cuò)誤時(shí)會(huì)建議不要只檢查當(dāng)前行,錯(cuò)誤可能會(huì)存在于上下文中(有可能跨多行的錯(cuò)誤),這個(gè)例子中仔細(xì)檢查可以發(fā)現(xiàn)在'小明'后面少了一個(gè)逗號。

排查重點(diǎn):使用主流的 IDE 例如 "VSCode" 進(jìn)行排查

Uncaught SyntaxError: Unexpected identifier

  1. var person = { 
  2.   name: '小明' 
  3.   family: { 
  4.     name: '小明家' 
  5.   } 

語法解析錯(cuò)誤,因?yàn)樵趯ο蠼Y(jié)構(gòu)中缺少一個(gè)逗號,除了通過在 VSCode 中查看外,也可以直接通過 Chrome Console 切換到 Source 頁面查看錯(cuò)誤行,并檢查此行的上下文中是否存在語法錯(cuò)誤。

Uncaught SyntaxError: Unexpected end of input

  1. function fn() { 
  2.   console.log('這是一個(gè)函數(shù)'); 
  3. console.log(fn); 

語法解析錯(cuò)誤:未預(yù)期的結(jié)束,這個(gè)例子中缺少結(jié)尾的大括號 },在編寫代碼時(shí)盡可能的維持正確的鎖緊,將代碼排列整齊之后更容易找到錯(cuò)誤。

Uncaught SyntaxError: Unexpected token '}'

  1. if (name) 
  2.   console.log('立即執(zhí)行函數(shù)') 
  3. }; 

語法解析錯(cuò)誤:未預(yù)期的符號 },代碼結(jié)尾多了一個(gè) } 符號導(dǎo)致環(huán)境運(yùn)行錯(cuò)誤,這個(gè)錯(cuò)誤的排查方法與上面相同,盡可能將代碼排整齊并維持首尾符號的一致。

除此之外再推薦一個(gè) VSCode 工具,可以為你的首尾標(biāo)簽加上對應(yīng)的色彩:

https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer

例子:代碼中成對的 {} 都會(huì)以相同的顏色展示。

Uncaught SyntaxError: Identifier 'a' has already been declared

  1. let a; 
  2. let a; 

語法解析錯(cuò)誤:識(shí)別符號(在這里指的是變量)已經(jīng)被聲明,應(yīng)該避免重復(fù)生命同一個(gè)變量,在 ES6 都禁止用 let、const 對變量進(jìn)行重復(fù)聲明,直接排除即可。

錯(cuò)誤類型:ReferenceError

ReferenceError 這類錯(cuò)誤通常是指找不到引用,當(dāng)出現(xiàn)這類錯(cuò)誤時(shí)在 IDE 中不一定會(huì)提示現(xiàn)錯(cuò)誤(除非安裝了 Linter),所以在代碼的運(yùn)行階段才會(huì)看到這類錯(cuò)誤。

排查重點(diǎn):

  • 通過 Chrome 的提示改正
  • 在 JavaScript 開發(fā)環(huán)境中安裝 ESLint

ReferenceError: a is not defined

  1. ReferenceError: a is not defined 

引用錯(cuò)誤:由于變量 a 未定義,所以在使用這個(gè)變量時(shí)會(huì)出現(xiàn)未定義的提示,只要先定義好這個(gè)變量即可。

還有另一種很常見的情況,當(dāng)引用外部包時(shí)出現(xiàn) “包名 + is not defined”,這種情況通常是外部資源沒有被正確載入,應(yīng)該確保該資源被正確的引入。

下面的例子就是因?yàn)?jQuery 沒有正確導(dǎo)入而導(dǎo)致的。

  1. Uncaught ReferenceError: $ is not defined 

錯(cuò)誤類型:TypeError

TypeError 是類型上的錯(cuò)誤,同樣 IDE 也不會(huì)預(yù)先提示有錯(cuò)誤,必須在執(zhí)行時(shí)才會(huì)看到,這類型的錯(cuò)誤通常是以下幾種:

  • 試圖獲取 undefined、null 的屬性
  • 嘗試調(diào)用非函式變量或表達(dá)式(例如: 'text'())

排查重點(diǎn):在獲取變量前先確認(rèn)其當(dāng)前的數(shù)據(jù)類型及結(jié)構(gòu)

Uncaught TypeError: Cannot read property 'a' of undefined

  1. var a; 
  2. console.log(a.a); 

說明:在這個(gè)變量的值中無法找到其特定的屬性,例如在 undefined、null 的值上是找不到其它屬性的,如果無法確認(rèn)該變量是否為 undefined,可以把代碼改成這樣:

  1. if (typeof a !== 'undefined') { 
  2.   console.log(a.a); 

Uncaught TypeError: console.log(...) is not a function

  1. console.log('a') 
  2. (function() { 
  3.   console.log('立即執(zhí)行函數(shù)') 
  4. })() 

說明:這代碼看起來是立即執(zhí)行函數(shù)的錯(cuò)誤,但是卻出現(xiàn)了 console.log(...) is not a function。這個(gè)錯(cuò)誤主要是因?yàn)槿鄙倭朔痔枴?/p>

當(dāng)遇到這類錯(cuò)誤時(shí)只要在兩者之間補(bǔ)上分號即可。

  1. console.log('a'); 
  2. (function() { 
  3.   console.log('立即執(zhí)行函數(shù)') 
  4. })() 

錯(cuò)誤類型:RangeError

這是創(chuàng)建了超過長度上限的數(shù)組或執(zhí)行了無法退出的遞歸函數(shù)所造成的錯(cuò)誤,遇到這類問題需要重新檢查代碼的邏輯,是否消耗了過多的資源(內(nèi)存或CPU資源)。

排查重點(diǎn):需要重新檢查邏輯,如果有必要可先刪除部分代碼,先找出錯(cuò)誤的片段后再進(jìn)行除錯(cuò)。

Uncaught RangeError: Maximum call stack size exceeded

  1. (function a() { 
  2.   a(); 
  3. })(); 

說明:在函數(shù)調(diào)用時(shí)會(huì)產(chǎn)生一個(gè)函數(shù)調(diào)用棧,如果在遞歸的過程中超過上限則會(huì)產(chǎn)生錯(cuò)誤。

這類錯(cuò)誤也很常見,卻不容易找到出錯(cuò)的原因,其主要原因是在遞歸時(shí)超過了環(huán)境的限制(使用框架時(shí)也很常見),如果遇到這錯(cuò)誤建議改寫當(dāng)前調(diào)用函數(shù)的方式。

總結(jié)

當(dāng) Chrome Console 報(bào)錯(cuò)時(shí)要保持淡定,在編碼的過程中出現(xiàn)錯(cuò)誤是很常見的,所謂的大佬與新手之間的區(qū)別之一就是遇到錯(cuò)誤時(shí)的經(jīng)驗(yàn),遇到錯(cuò)誤時(shí)搞不清楚沒關(guān)系,這都是經(jīng)驗(yàn)的累積。只要積累足夠了,再遇到相同的問題時(shí)就能自然而然的輕松面對了。

 

責(zé)任編輯:趙寧寧 來源: 前端先鋒
相關(guān)推薦

2016-10-09 10:29:02

migratelaravelphp

2019-06-21 10:13:26

JavaScript錯(cuò)誤開發(fā)

2024-07-04 09:05:30

2010-01-22 15:42:01

VB.NET錯(cuò)誤

2010-08-16 13:51:22

DIV+CSS

2017-04-07 09:02:06

Spark方法優(yōu)化

2021-03-10 09:44:20

微信小程序APP

2021-12-27 08:58:28

低代碼開發(fā)數(shù)據(jù)安全

2017-11-22 14:20:07

前端JavaScript排序算法

2010-04-19 14:33:06

Oracle tns配

2011-05-18 14:44:13

mysql1046錯(cuò)誤

2022-03-11 10:01:47

開發(fā)跨域技術(shù)

2017-03-17 14:18:34

JavaScript算法問題詳解

2009-08-27 11:12:04

C# foreach

2022-03-17 08:34:47

TypeScript項(xiàng)目類型

2019-04-09 21:10:23

iOS加密框架

2013-05-30 14:21:38

2009-12-30 15:29:14

2009-06-30 16:03:00

異常Java

2020-08-13 06:43:41

React前端開發(fā)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 超级乱淫av片免费播放 | 日韩成人免费在线视频 | 色视频网站 | 国产一伦一伦一伦 | 亚洲va欧美va人人爽午夜 | 亚洲精品在线播放 | 国产91黄色 | 日本中出视频 | 国产精品日韩 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 日日夜夜免费精品视频 | 综合第一页 | 中文字幕在线电影观看 | 亚洲毛片| 久久99精品视频 | www.欧美| 黄色大片网站 | 久久久久国产精品一区二区 | 99国产精品99久久久久久 | gav成人免费播放视频 | 黄色播放| 国产小视频在线看 | 久久久91精品国产一区二区三区 | 91在线精品秘密一区二区 | 欧美在线一区二区三区 | 午夜爱爱毛片xxxx视频免费看 | 99视频免费 | 91免费在线看 | 精品国产乱码久久久久久果冻传媒 | 亚洲国产精品久久久久婷婷老年 | 亚洲综合大片69999 | 精品乱人伦一区二区三区 | 欧美精品一区二区在线观看 | 亚洲成人中文字幕 | 中文字幕免费在线 | 在线看片国产精品 | 干干天天 | 亚洲精品女优 | 91精品国产综合久久久久久 | 日本久久黄色 | 国产清纯白嫩初高生视频在线观看 |