您好,登錄后才能下訂單哦!
JavaScript編程中會(huì)出現(xiàn)的錯(cuò)誤類型有哪些?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
下面我們來看看在編譯是會(huì)發(fā)現(xiàn)的JavaScript錯(cuò)誤是什么?
一、語法錯(cuò)誤(Syntax Errors)
語法錯(cuò)誤,也稱為解析錯(cuò)誤,會(huì)發(fā)生在傳統(tǒng)編程語言的編譯和JavaScript的解析時(shí)。
例1,以下行導(dǎo)致語法錯(cuò)誤,因?yàn)樗鄙儆依ㄌ?hào)。
<script type="text/javascript"> // window.print(; </script>
例2:
123consloe.log(123) // 未捕獲的語法錯(cuò)誤:意外標(biāo)識(shí)符 console.123) // 未捕獲的語法錯(cuò)誤: 出乎意料的數(shù)字
當(dāng)JavaScript中出現(xiàn)語法錯(cuò)誤時(shí),只有與語法錯(cuò)誤包含在同一線程中的代碼才會(huì)受到影響,而其他線程中的其余代碼將被執(zhí)行,假設(shè)它們中的任何內(nèi)容都不依賴于包含錯(cuò)誤的代碼。
二、運(yùn)行時(shí)錯(cuò)誤(Runtime Errors)
運(yùn)行時(shí)錯(cuò)誤(也稱為異常)是在JavaScript執(zhí)行期間(編譯/解釋之后)發(fā)生的錯(cuò)誤。
1、引用錯(cuò)誤(ReferenceError)
ReferenceError:引用一個(gè)不存在的變量時(shí)發(fā)生的錯(cuò)誤;將一個(gè)值分配給無法分配的對(duì)象,比如對(duì)函數(shù)的運(yùn)行結(jié)果或者函數(shù)賦值就會(huì)發(fā)生的錯(cuò)誤。
例如下面的情況:
// 引用了不存在的變量 a() // 未定義引用錯(cuò)誤:a 未定義 console.log(b) // 未引用引用錯(cuò)誤:b未定義 // 給一個(gè)無法被賦值的對(duì)象賦值 console.log("abc") = 1 // 未引用引用錯(cuò)誤:左側(cè)賦值無效
2、范圍錯(cuò)誤(RangeError)
RangeError:是一個(gè)在超出有效范圍時(shí)會(huì)發(fā)生的錯(cuò)誤。主要有以下幾種情況:
1)、當(dāng)數(shù)組長(zhǎng)度為負(fù)數(shù)時(shí),發(fā)生錯(cuò)誤;
2)、當(dāng)Number對(duì)象的方法參數(shù)超出范圍時(shí),發(fā)生錯(cuò)誤;
3)、當(dāng)函數(shù)堆棧超過最大值時(shí),發(fā)生錯(cuò)誤。
例如下面的情況:
// 數(shù)組長(zhǎng)度為負(fù)數(shù) [].length = -5 // 范圍錯(cuò)誤:無效的數(shù)組長(zhǎng)度 // Number對(duì)象的方法參數(shù)超出范圍 var num = new Number(12.34) console.log(num.toFixed(-1)) // 范圍錯(cuò)誤: 在Number.toFixed中,toFixEd()的數(shù)字參數(shù)必須在0到20之間。 // 說明: toFixed方法的作用是將數(shù)字四舍五入為指定小數(shù)位數(shù)的數(shù)字,參數(shù)是小數(shù)點(diǎn)后的位數(shù),范圍為0-20.
3、類型錯(cuò)誤( TypeError)
TypeError:變量或參數(shù)不是預(yù)期類型時(shí)發(fā)生的錯(cuò)誤。
例:在使用new字符串、布爾值等原始類型和調(diào)用對(duì)象不存在的方法就會(huì)拋出這種錯(cuò)誤,因?yàn)閚ew命令的參數(shù)應(yīng)該是一個(gè)構(gòu)造函數(shù)。
// 調(diào)用不存在的方法 123() // 類型錯(cuò)誤: 123不是一個(gè)函數(shù) var o = {} o.run() // 類型錯(cuò)誤: o.run 不是一個(gè)函數(shù) // new關(guān)鍵字后接基本類型 var p = new 456 // 類型錯(cuò)誤: 456 不是構(gòu)造函數(shù)
4、URIError:URL相關(guān)函數(shù)錯(cuò)誤使用
URIError:主要是URL相關(guān)函數(shù)的參數(shù)不正確。
例如下面的情況:
decodeURI("%1") // URIError: 在解碼過程中變形了的URI
URI相關(guān)參數(shù)不正確時(shí)拋出的錯(cuò)誤,主要涉及以下六個(gè)函數(shù):
encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()
5、EvalError:eval()函數(shù)執(zhí)行錯(cuò)誤
EvalError:在ES5以下的JavaScript中,當(dāng)eval()函數(shù)沒有被正確執(zhí)行時(shí),會(huì)拋出evalError錯(cuò)誤。
例如下面的情況:
var myEval = eval; myEval("alert('call eval')");
需要注意的是:ES5以上的JavaScript中已經(jīng)不再拋出該錯(cuò)誤,但依然可以通過new關(guān)鍵字來自定義該類型的錯(cuò)誤提示。
三、邏輯錯(cuò)誤
邏輯錯(cuò)誤可能是最難追蹤的錯(cuò)誤類型。這些錯(cuò)誤不是語法或運(yùn)行時(shí)錯(cuò)誤的結(jié)果。相反,當(dāng)你在驅(qū)動(dòng)你的腳本的邏輯中犯了錯(cuò)誤并且你沒有得到你期望的結(jié)果時(shí),它們會(huì)發(fā)生。
看完上述內(nèi)容,你們掌握J(rèn)avaScript編程中會(huì)出現(xiàn)的錯(cuò)誤類型有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。