电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

7個你應該知道的JS原生錯誤類型

瀏覽:89日期:2024-03-30 16:59:40
概述

從瀏覽器控制臺到運行 Node.js的終端,我們到處都會看到錯誤。本文的重點是概述我們在js開發過程中可能遇到的錯誤類型。

提示:良好的錯誤提示會導致快速而無痛的發展經歷與緩慢而痛苦的發展經歷之間的區別。在編寫可重用的代碼時,請確保自己在編寫清晰易懂的錯誤處理代碼。

1. RangeError

當數字超出允許的值范圍時,將會拋出此錯誤。

例如

const l = console.logconst arr = [90,88]arr.length=90**99

我們有一個數組,帶有兩個元素的 arr。接下來,嘗試將數組擴展為包含90**99 == 2.9512665430652753e+193個元素。

這個數字超出了數組大小可以增長的范圍。運行它會拋出 RangeError:

$ node errors

errors.js:4

arr.length=90**99

 ^RangeError: Invalid array length

因為我們要增加 arr 數組的大小超出了 JS 指定的范圍。

2. ReferenceError

當對變量或項目的引用被破壞時,將會引發此錯誤。那是變量或項目不存在。

例如

const l=console.logconst cat = 'cat'catdog

有一個變量cat被初始化為 “cat”。接下來引用了cat變量和dog變量。cat變量存在,而dog變量不存在。

cat將返回 “cat”,而dog將引發引用錯誤,因為在環境記錄中找不到名稱dog。

$ node errors

errors.js:3

dog

^ReferenceError: dog is not defined

每當我們創建或定義變量時,變量名稱都會寫入環境記錄中。環境記錄就像鍵值存儲一樣,

+-------------+

| Key | Value |

---------------

| cat | 'cat' |

+-------------+

每當我們引用變量時,它都會存儲程序中定義的變量。當在記錄中找到環境值并提取并返回值時,將以該變量的名稱作為關鍵字在環境記錄進行搜索。調用尚未定義的函數。

現在,當我們創建或定義一個沒有賦值的變量時。變量將其鍵作為變量名寫入環境記錄,但其值將會保持未定義的狀態。

var catenv record

+-----------------+

| Key | Value |

-------------------

| cat | undefined |

+-----------------+

稍后為變量分配值時,將在環境記錄中搜索該變量,當發現它未定義值時,該賦值將被覆蓋。

var cat

cat = 'cat'env record

+-------------+

| Key | Value |

---------------

| cat | 'cat' |

+-------------+

所以當在環境記錄中找不到變量名時,JS 引擎將引發 RefernceError。

+-------------+

| Key | Value |

---------------

| cat | 'cat' |

+-------------+cat // 'cat', yes, :) it’s there

dog // :( what’s this? can’t find it

注意:未定義的變量不會拋出 ReferenceError,因為它在于環境記錄中的值尚未設置。

3. SyntaxError

這是最常見的錯誤。當我們輸入 JS 引擎不能理解的代碼時,就會發生這個錯誤。

JS 引擎在解析期間捕獲了這個錯誤。在 JS 引擎中,我們的代碼經歷了不同的階段,然后才能在終端上看到結果。

標記化 解析 解釋

標記化將代碼的源分解為各個單元。在此階段,將對數字、關鍵字、文字、運算符進行分類并分別標記。

接下來,生成的標記流將會傳遞到解析階段,由解析器處理。這是從標記流生成 AST 的地方。 AST 是代碼結構的抽象表示。

在標記化和解析這兩個階段,如果我們代碼的語法不符合 JS 的語法規則,則會使該階段失敗并引發 SyntaxError。例如:

const l = console.loglet cat h = 'cat'

代碼中的 “h” 代表什么?這個 “h” 破壞了代碼。

$ node errors

errors.js:3

let cat h = 'cat'

 ^SyntaxError: Unexpected identifier

看,Node.js 指出了問題的所在。它說 “h” 是意外的,它破壞了cat 變量的聲明。

因此,可以說語法錯誤在解析或編譯期間發生。

4. TypeError

當其他 NativeError 對象中沒有適當的失敗原因的指示時,TypeError 用于指示操作失敗。

對錯誤的數據類型執行操作時會發生 TypeError,例如:

如果我們嘗試將數字轉換為大寫,如下所示:

const num = 123num.toUpperCase()

這將引發TypeError

$ node errors

errors.js:4

num.toUpperCase()

 ^TypeError: num.toUpperCase is not a function

因為toUpperCase函數需要字符串數據類型。toUpperCase函數是有意通用的;它不需要其this值是String對象。因此,可以將其轉移到其他種類的對象中用作方法。

只有字符串才會轉換為大寫或小寫形式,如果我們在 Objects、Boolean、Symbol、null、undefined 數據類型上調用toUpperCase函數,則將會得到 TypeError,因為它操作的數據類型錯誤。

5. URIError

這表明使用了一種與其定義不兼容的全局 URI 處理函數。

JS 中的 URI(統一資源指示符)具有以下功能:decodeURI、decodeURIComponent 等。

如果我們用錯誤的參數去調用其中任何一個,將得會到一個 URIError。

decodeURI('%')^URIError: URI malformed

encodeURI用于獲取 URI 的未編碼版本。 “%” 不是正確的 URI,因此引發了URIError。

當 URI 編碼或解碼出現問題時,會引發 URIError。

6. EvalError

當使用全局eval()函數時,這用于識別錯誤。

根據 EcmaSpec 2018 版:

此規范當前未使用此異常。保留它目的是為了與本規范的先前版本兼容。

7. InternalError

該錯誤在 JS 引擎內部發生,特別是當它有太多數據要處理并且棧增長超過其關鍵限制的時侯。

當 JS 引擎被過多的遞歸和切換情況等淹沒時,就會發生這種問題

switch(num) { case 1: ... break case 2: ... break case 3: ... break case 4: ... break case 5: ... break case 6: ... break case 7: ... break ... up to 1000 cases }

以下是一個簡單的過多遞歸的例子:

function foo() { foo()}foo()總結

正如我們所說,誰都會犯錯誤。就我們敲代碼這件事而言,這是一個穩定的事件。為了克服它,我們需要知道可以拋出的原生錯誤的類型。本文中列出了它們,并提供了一些示例來說明它們是如何引發的。

所以無論什么時候在終端或瀏覽器中引發錯誤,你都可以輕松發現錯誤產生的位置和方式,并能夠編寫更好、更不易出錯的代碼。

以上就是7個你應該知道的JS原生錯誤類型的詳細內容,更多關于JS原生錯誤類型的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 学生作文网_中小学生作文大全与写作指导 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 首页 - 军军小站|张军博客 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | Type-c防水母座|贴片母座|耳机接口|Type-c插座-深圳市步步精科技有限公司 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | LINK FASHION 童装·青少年装展| 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 东莞海恒试验仪器设备有限公司 | 包头市鑫枫装饰有限公司| 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 |