最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的Error錯誤對象與自定義錯誤類型詳解

 更新時間:2022年12月01日 11:27:49   作者:jimojianghu  
Error是JavaScript中最原始的錯誤對象,作為各種異常的基礎對象,還有多個衍生的具體的錯誤類型,這些錯誤對象類型在nodejs中也可應用,這篇文章主要介紹了JavaScript中的Error錯誤對象與自定義錯誤類型,需要的朋友可以參考下

Error

Error是JavaScript語言中的一個標準的內(nèi)置對象,專門用于處理JS開發(fā)中的運行時錯誤。
當我們的JS代碼在運行過程中發(fā)生錯誤的話,就會拋出Error對象,整個程序?qū)袛嘣阱e誤發(fā)生的代碼處,不再繼續(xù)執(zhí)行,這也是錯誤類型必須重視的原因:它會導致頁面無法顯示或者功能失效。
Error是JavaScript中最原始的錯誤對象,作為各種異常的基礎對象,還有多個衍生的具體的錯誤類型,這些錯誤對象類型在nodejs中也可應用。

Error作為內(nèi)置對象,它本身數(shù)據(jù)類型是 function,但被引用時它的數(shù)據(jù)類型是 object,和 Object、Array 類似,使用 typeof 進行判斷如下:

typeof Error // 'function'
typeof Error() // 'object'
typeof new Error() // 'object'

關于typeof的詳細知識,可參考本博前文一文搞懂js中的typeof用法

Error語法

下面介紹下Error對象基本的語法知識。
Error對象既可以當作構(gòu)造函數(shù)使用,也可以當作方法,一般有兩個可選參數(shù):

new Error(message, options)
Error(message, options)

可選參數(shù)說明如下:

  • message:錯誤信息描述
  • options:屬性對象
    • cause:指定錯誤的具體原因

Error屬性和方法

Error實例必然包含 message 屬性,除此外一般還提供 name 和 stack 屬性,而 cause 屬性則根據(jù)定義來確定。

  • message:錯誤信息描述
  • name:錯誤的類型名字
  • stack:錯誤的堆棧軌跡,用于堆棧追蹤
  • cause:當前錯誤被拋出的具體原因

下面通過一個示例,看下具體的屬性信息:

const err = new Error('發(fā)生錯誤!', { cause: '333' })
console.log(err)
// Error: 發(fā)生錯誤!
//  at <anonymous>:1:13
console.log(err.message)
// '發(fā)生錯誤!'
console.log(err.cause)
// '333'
console.log(err.stack)
// Error: 發(fā)生錯誤!
//  at <anonymous>:1:13

如上代碼,定義了一個錯誤對象,并賦予兩個參數(shù),在控制臺輸出,可以看到該錯誤對象具體的屬性信息。
需要注意的是,只有定義了cause屬性的Error實例,才有該屬性,否則cause屬性不存在,如下所示:

const err2 = new Error('發(fā)生錯誤!')
console.log(err2.cause)
// undefined

err2.cause的輸出為undefined,因為構(gòu)造函數(shù)并沒有定義該屬性。
Error對象沒有自己特有的實例方法,只有繼承自Object對象的,這里略過。

六種常見錯誤類型

Error對象衍生有六種常見的錯誤類型,屬于Error的派生類,屬性和方法也都繼承自Error,下面一一介紹下這六種類型。

SyntaxError

SyntaxError 語法錯誤,表示JS代碼發(fā)生的語法上的錯誤,包括各種不符合語法規(guī)范、書寫錯漏等情況。

如下變量名錯誤:

const 11 = 8
// Uncaught SyntaxError: Unexpected number

錯誤的代碼語法:

Error(+)
// Uncaught SyntaxError: Unexpected token ')'

SyntaxError語法錯誤無法被捕獲,因為語法錯誤不會被執(zhí)行,直接拋出錯誤,所幸的是,現(xiàn)在的IDE工具和各種插件,已可規(guī)避大部分的語法錯誤。

TypeError

TypeError 類型錯誤,當代碼中的變量參數(shù)等類型不對時,就會發(fā)生該類型錯誤。

比如,把屬性當方法使用:

window.location()
// Uncaught TypeError: window.location is not a function
//    at <anonymous>:1:8

錯誤的構(gòu)造函數(shù)使用:

new null()
// Uncaught TypeError: null is not a constructor
//    at <anonymous>:1:1

ReferenceError

ReferenceError 引用錯誤,當引用一個并不存在的變量時會發(fā)生的錯誤。

如直接在瀏覽器控制打印:

a
// Uncaught ReferenceError: a is not defined
//  at <anonymous>:1:1

cons.log('')
// Uncaught ReferenceError: cons is not defined
//  at <anonymous>:1:1

錯誤的值分配,給 null 賦值:

null = 1
// Uncaught SyntaxError: Invalid left-hand side in assignment

RangeError

RangeError 取值范圍錯誤,當給某個對象指定一個不在取值范圍內(nèi)的特定值時發(fā)生的錯誤。

如給Array對象傳入不合法的長度參數(shù)

Array(-1)
Array(Infinity)
// Uncaught RangeError: Invalid array length
//  at <anonymous>:1:1

數(shù)字類型方法的使用:

5..toFixed(200)
// Uncaught RangeError: toFixed() digits argument must be between 0 and 100
//  at Number.toFixed (<anonymous>)
//  at <anonymous>:1:4

toFixed() 參數(shù)取值范圍在0到100之間,超過則會報錯。

URIError

URIError 當使用URI相關方法處理數(shù)據(jù)時,當這些方法的參數(shù)不正確時導致的一些錯誤。
主要常見于URI的解碼等方法decodeURI()、decodeURIComponent()等。

decodeURI('%')
decodeURIComponent('%')
// Uncaught URIError: URI malformed
//  at decodeURIComponent (<anonymous>)
//  at <anonymous>:1:1

EvalError

EvalError 當在使用eval函數(shù)時,發(fā)生的錯誤。eval不被推薦使用,該錯誤類型一般很少見,處于半廢棄狀態(tài),為了兼容考慮才存在。

自定義錯誤類型

除了JavaScript自帶的常見錯誤類型以外,我們還可以自定義特殊的錯誤類型。
處理起來也很簡單,使用繼承Error對象的方式即可。

class CharError extends Error {
  constructor(message = '字符錯誤') {
    super(message)
    this.name = 'CharError'
  }
}

以上代碼使用es6的類繼承方式,自定義一個錯誤類型繼承Error對象,后續(xù)就可以使用新的 CharError 類型。

const ce = new CharError()
console.log(ce)
// CharError: 字符錯誤
//  at error.html:26:16

如上,與JavaScript內(nèi)置錯誤類型使用方式一致。

到此這篇關于JavaScript中的Error錯誤對象與自定義錯誤類型的文章就介紹到這了,更多相關js 錯誤對象error內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

洞头县| 平顺县| 贵阳市| 天津市| 沙河市| 宜都市| 滦平县| 于田县| 湟源县| 吉林市| 安顺市| 凤翔县| 襄城县| 绥化市| 上犹县| 蓬莱市| 平武县| 麻阳| 海安县| 淄博市| 石渠县| 柞水县| 望都县| 安平县| 禄劝| 津南区| 务川| 西吉县| 屏东县| 报价| 砚山县| 通江县| 伊金霍洛旗| 青田县| 榆林市| 新建县| 车险| 江达县| 巫山县| 新巴尔虎右旗| 荆州市|