溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript編程中會(huì)出現(xiàn)的錯(cuò)誤類型有哪些

發(fā)布時(shí)間:2020-07-09 16:12:29 來源:億速云 閱讀:168 作者:Leah 欄目:web開發(fā)

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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI