您好,登錄后才能下訂單哦!
javaScript代碼飄紅怎么辦?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
一、本文將會出現(xiàn)以下英語詞匯
assignment[əˈsaɪnmənt] 賦值;分配
assignment [əˈsaɪnmənt] 分配;任務(wù)
call [kɔːl] 調(diào)用
caught [kɔːt] 捕獲;接住;截住;攔住;
constructor [kənˈstrʌktə(r)] 構(gòu)造器
cannot [ˈkænɒt] 不是
catch [kætʃ] 接住;抓住
constant[ˈkɒnstənt] 常量
defined [dɪˈfaɪnd] 定義
error [ˈerə(r)] 錯(cuò)誤; 差錯(cuò); 謬誤;
exceeded [ɪkˈsiːdɪd] 超過
function [ˈfʌŋkʃn] 函數(shù)
finally [ˈfaɪnəli] 最終;最后
invalid [ɪnˈvælɪd] 不承認(rèn)的; 無效的
initializer [ɪˈnɪʃəˌlaɪzə] 初始值
left-hand [ˈleft hænd] 左邊的
Maximum [ˈmæksɪməm] 最大
property [ˈprɒpəti] 屬性;財(cái)產(chǎn)
stack [stæk] 堆棧
shorthand [ˈʃɔːthænd]
syntax [ˈsɪntæks] 句法; 句法規(guī)則; 語構(gòu);
side [saɪd] 一邊;一側(cè);
reference [ˈrefrəns] 談及; 涉及;
range [reɪndʒ] 范圍;界限;區(qū)間; 類; 種;
token [ˈtəʊkən] 令牌;標(biāo)記
try [traɪ] 嘗試
throw [θrəʊ] 投;擲;拋;扔;摔;丟;猛推;使勁撞
Uncaught 未捕獲
unexpected [ˌʌnɪkˈspektɪd] 出乎意料的;始料不及的
undefined [ˌʌndɪˈfaɪnd] 未定義
variable[ˈveəriəbl] 變量
二、帶你領(lǐng)略JS常見的四種Error類型
1、ReferenceError(引用錯(cuò)誤):使用了未定義的變量。錯(cuò)誤之前的代碼會執(zhí)行,之后代碼不會執(zhí)行。
// 1、變量未定義便直接使用 console.log(my); // 報(bào)錯(cuò):Uncaught ReferenceError: my is not defined // 翻譯:my未定義 // 2、將變量賦值給一個(gè)無法被賦值的東東 Math.random()=1; // 報(bào)錯(cuò):Uncaught ReferenceError: Invalid left-hand side in assignment // 翻譯:左側(cè)的賦值無效
2、TypeError(類型錯(cuò)誤):變量或參數(shù)不是預(yù)期類型,或調(diào)用對象不存在的屬性方法。錯(cuò)誤之前的代碼會執(zhí)行,之后代碼不會執(zhí)行。
// 1、變量不是預(yù)期類型,比如對字符串、布爾值、數(shù)值等原始類型的值使用new命令。 let userName = new "zhangpeiyue"; // 報(bào)錯(cuò):Uncaught TypeError: "zhangpeiyue" is not a constructor // 翻譯:"zhangpeiyue" 不是一個(gè)構(gòu)造函數(shù)。new 操作符后應(yīng)該是一個(gè)構(gòu)造函數(shù) // 2、變量不是預(yù)期類型,比如變量被作為函數(shù)來使用 let userName = "zhangpeiyue"; console.log(userName()) // 報(bào)錯(cuò):Uncaught TypeError: userName is not a function // 翻譯:userName 不是一個(gè)函數(shù) // 3、對象的屬性或方法不存在 const obj = undefined;// 為null也會報(bào)錯(cuò) console.log(obj.userName); // 報(bào)錯(cuò):Uncaught TypeError: Cannot read property 'userName' of undefined // 翻譯:undefined的環(huán)境下無法讀取屬性“userName”
3、RangeError(范圍錯(cuò)誤):數(shù)據(jù)值不在JS所允許的范圍內(nèi)。錯(cuò)誤之前的代碼會執(zhí)行,之后代碼不會執(zhí)行。
// 1、遞歸函數(shù)未設(shè)置跳出的條件 function run(){ run(); } run(); // 報(bào)錯(cuò):Uncaught RangeError: Maximum call stack size exceeded // 翻譯:超出最大調(diào)用堆棧大小。原因函數(shù)一直調(diào)用,直到達(dá)到調(diào)用堆棧限制。 // 2、無效的數(shù)組長度,應(yīng)該是個(gè)正整數(shù) const arr =new Array(-1); // 報(bào)錯(cuò):Uncaught RangeError: Invalid array length // 翻譯:無效的數(shù)組長度
4、SyntaxError(語法錯(cuò)誤):即寫的代碼不符合js編碼規(guī)則。我們可以根據(jù)后面的信息提示去修改錯(cuò)誤,當(dāng)然,語法錯(cuò)誤,瀏覽器會直接報(bào)錯(cuò),整個(gè)代碼都不會執(zhí)行。
// 1、程序錯(cuò)誤,比如寫錯(cuò),或者缺少 , ) ; } 這些符號。 const obj = {; // 報(bào)錯(cuò):Uncaught SyntaxError: Unexpected token ';' // 翻譯:";"該標(biāo)記有些出乎意料。 // 2、變量定義不合法 let 8userName = "zhangpeiyue"; // 報(bào)錯(cuò):Uncaught SyntaxError: Invalid or unexpected token // 翻譯:定義的變量標(biāo)記無效 // 3、對象屬性賦值語法錯(cuò)誤 const obj = { userName = "zhangpeiyue" } // 報(bào)錯(cuò):Uncaught SyntaxError: Invalid shorthand property initializer // 翻譯:對象屬性初始值無效。原因:對象中屬性與其對應(yīng)的值之間使用“=” // 語法錯(cuò)誤有很多,在此就不一一列舉了
三、通過try…catch處理Error
1、被try包裹的代碼塊一旦出現(xiàn)Error,會將Error傳遞給catch并運(yùn)行catch代碼塊。不會影響后續(xù)代碼運(yùn)行。
try{ console.log(userName); }catch (err) { // ReferenceError: userName is not defined console.log(err); } console.log("我還會繼續(xù)運(yùn)行哦?。?quot;)
2、出現(xiàn)SyntaxError(語法錯(cuò)誤),不會被拋出。
try{ // Uncaught SyntaxError: Invalid or unexpected token const 8userName = "zhangpeiyue"; }catch (err) { console.log(err); } console.log("我不會繼續(xù)運(yùn)行了!!")
3、通過 throw new Error 拋出錯(cuò)誤
try{ throw new Error("出現(xiàn)異常了"); }catch (err) { // 錯(cuò)誤相關(guān)信息 console.log(err.message);// 出現(xiàn)異常了 // 函數(shù)調(diào)用棧記錄信息 console.log(err.stack);// Error: 出現(xiàn)異常了 } console.log("我還會繼續(xù)運(yùn)行哦?。?quot;)
4、不管有沒有異常,finally中的代碼都會在try和catch之后執(zhí)行
try{ throw new Error("出現(xiàn)異常了"); }catch (err) { // 錯(cuò)誤相關(guān)信息 console.log(err.message);// 出現(xiàn)異常了 // 函數(shù)調(diào)用棧記錄信息 console.log(err.stack);// Error: 出現(xiàn)異常了 }finally { // 不管有沒有異常,我都會執(zhí)行。哪怕你有return,我也會執(zhí)行! console.log("不管有沒有異常,我都會執(zhí)行。哪怕你有return,我也會執(zhí)行!") } console.log("我還會繼續(xù)運(yùn)行哦?。?quot;)
5、總結(jié)
try{ //可能發(fā)生錯(cuò)誤的代碼 }catch(err){ //只有發(fā)生錯(cuò)誤時(shí)才執(zhí)行的代碼 }finally{ //無論是否出錯(cuò),肯定都要執(zhí)行的代碼 }
看完上述內(nèi)容,你們掌握javaScript代碼飄紅怎么辦的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。