- Javascript 基础教程
- Javascript - 首页
- JavaScript - 路线图
- JavaScript - 概述
- JavaScript - 特性
- JavaScript - 启用
- JavaScript - 位置
- JavaScript - 语法
- JavaScript - Hello World
- JavaScript - Console.log()
- JavaScript - 注释
- JavaScript - 变量
- JavaScript - let 语句
- JavaScript - 常量
- JavaScript - 数据类型
- JavaScript - 类型转换
- JavaScript - 严格模式
- JavaScript - 保留关键字
- JavaScript 运算符
- JavaScript - 运算符
- JavaScript - 算术运算符
- JavaScript - 比较运算符
- JavaScript - 逻辑运算符
- JavaScript - 位运算符
- JavaScript - 赋值运算符
- JavaScript - 条件运算符
- JavaScript - typeof 运算符
- JavaScript - 空值合并运算符
- JavaScript - delete 运算符
- JavaScript - 逗号运算符
- JavaScript - 分组运算符
- JavaScript - yield 运算符
- JavaScript - 展开运算符
- JavaScript - 指数运算符
- JavaScript - 运算符优先级
- JavaScript 控制流
- JavaScript - if...else
- JavaScript - while 循环
- JavaScript - for 循环
- JavaScript - for...in
- Javascript - for...of
- JavaScript - 循环控制
- JavaScript - break 语句
- JavaScript - continue 语句
- JavaScript - switch case
- JavaScript - 用户自定义迭代器
- JavaScript 函数
- JavaScript - 函数
- JavaScript - 函数表达式
- JavaScript - 函数参数
- JavaScript - 默认参数
- JavaScript - Function() 构造函数
- JavaScript - 函数提升
- JavaScript - 自执行函数
- JavaScript - 箭头函数
- JavaScript - 函数调用
- JavaScript - Function call()
- JavaScript - Function apply()
- JavaScript - Function bind()
- JavaScript - 闭包
- JavaScript - 变量作用域
- JavaScript - 全局变量
- JavaScript - 智能函数参数
- JavaScript 对象
- JavaScript - Number
- JavaScript - Boolean
- JavaScript - String
- JavaScript - Array
- JavaScript - Date
- JavaScript - DataView
- JavaScript - Handler
- JavaScript - Math
- JavaScript - RegExp
- JavaScript - Symbol
- JavaScript - Set
- JavaScript - WeakSet
- JavaScript - Map
- JavaScript - WeakMap
- JavaScript - 可迭代对象
- JavaScript - Reflect
- JavaScript - TypedArray
- JavaScript - 模板字面量
- JavaScript - 标记模板
- 面向对象的 JavaScript
- JavaScript - 对象
- JavaScript - 类
- JavaScript - 对象属性
- JavaScript - 对象方法
- JavaScript - 静态方法
- JavaScript - 显示对象
- JavaScript - 对象访问器
- JavaScript - 对象构造函数
- JavaScript - 原生原型
- JavaScript - ES5 对象方法
- JavaScript - 封装
- JavaScript - 继承
- JavaScript - 抽象
- JavaScript - 多态
- JavaScript - 解构赋值
- JavaScript - 对象解构
- JavaScript - 数组解构
- JavaScript - 嵌套解构
- JavaScript - 可选链
- JavaScript - 全局对象
- JavaScript - Mixins
- JavaScript - Proxy
- JavaScript 版本
- JavaScript - 历史
- JavaScript - 版本
- JavaScript - ES5
- JavaScript - ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 异步
- JavaScript - 异步
- JavaScript - 回调函数
- JavaScript - Promise
- JavaScript - Async/Await
- JavaScript - 微任务
- JavaScript - Promise 化
- JavaScript - Promise 链式调用
- JavaScript - 定时事件
- JavaScript - setTimeout()
- JavaScript - setInterval()
- JavaScript Cookie
- JavaScript - Cookie
- JavaScript - Cookie 属性
- JavaScript - 删除 Cookie
- JavaScript 浏览器 BOM
- JavaScript - 浏览器对象模型
- JavaScript - Window 对象
- JavaScript - Document 对象
- JavaScript - Screen 对象
- JavaScript - History 对象
- JavaScript - Navigator 对象
- JavaScript - Location 对象
- JavaScript - Console 对象
- JavaScript Web API
- JavaScript - Web API
- JavaScript - History API
- JavaScript - Storage API
- JavaScript - Forms API
- JavaScript - Worker API
- JavaScript - Fetch API
- JavaScript - Geolocation API
- JavaScript 事件
- JavaScript - 事件
- JavaScript - DOM 事件
- JavaScript - addEventListener()
- JavaScript - 鼠标事件
- JavaScript - 键盘事件
- JavaScript - 表单事件
- JavaScript - Window/Document 事件
- JavaScript - 事件委托
- JavaScript - 事件冒泡
- JavaScript - 事件捕获
- JavaScript - 自定义事件
- JavaScript 错误处理
- JavaScript - 错误处理
- JavaScript - try...catch
- JavaScript - 调试
- JavaScript - 自定义错误
- JavaScript - 扩展错误
- JavaScript 重要关键字
- JavaScript - this 关键字
- JavaScript - void 关键字
- JavaScript - new 关键字
- JavaScript - var 关键字
- JavaScript HTML DOM
- JavaScript - HTML DOM
- JavaScript - DOM 方法和属性
- JavaScript - DOM Document
- JavaScript - DOM 元素
- JavaScript - DOM 属性 (Attr)
- JavaScript - DOM 表单
- JavaScript - 更改 HTML
- JavaScript - 更改 CSS
- JavaScript - DOM 动画
- JavaScript - DOM 导航
- JavaScript - DOM 集合
- JavaScript - DOM NodeList
- JavaScript - DOM DOMTokenList
- JavaScript 其他
- JavaScript - Ajax
- JavaScript - 异步迭代
- JavaScript - Atomics 对象
- JavaScript - rest 参数
- JavaScript - 页面重定向
- JavaScript - 对话框
- JavaScript - 页面打印
- JavaScript - 验证
- JavaScript - 动画
- JavaScript - 多媒体
- JavaScript - 图片地图
- JavaScript - 浏览器
- JavaScript - JSON
- JavaScript - 多行字符串
- JavaScript - 日期格式
- JavaScript - 获取日期方法
- JavaScript - 设置日期方法
- JavaScript - 模块
- JavaScript - 动态导入
- JavaScript - BigInt
- JavaScript - Blob
- JavaScript - Unicode
- JavaScript - 浅拷贝
- JavaScript - 调用栈
- JavaScript - 引用类型
- JavaScript - IndexedDB
- JavaScript - 点击劫持攻击
- JavaScript - 柯里化
- JavaScript - 图形
- JavaScript - Canvas
- JavaScript - 防抖
- JavaScript - 性能
- JavaScript - 风格指南
JavaScript - 自定义错误
自定义错误是创建JavaScript中用户定义错误类型的一种方法。这对于处理特定类型的错误(例如数据库错误或HTTP错误)非常有用。
JavaScript包含多个内置的错误对象。每当JavaScript代码中发生任何错误时,它都会抛出一个Error类的实例。但是,您也可以使用'throw'语句抛出带有自定义消息的Error类实例。
在某些情况下,开发人员需要创建自定义错误。例如,您正在获取用户在输入中输入的年龄。如果用户的年龄未满18岁,您可以抛出一个自定义错误,例如'ageNotValid',以便更清晰地说明。
让我们先了解Error类的语法,然后您将学习如何创建自定义错误。
Error 类
在JavaScript中,Error是一个通用的错误类。您可以创建一个Error类的实例,并将自定义消息作为参数传递。
Error类包含三个属性:name、message和stack。
因此,您可以假设Error类的语法如下所示。
class Error { constructor(message) { this.message = message; this.name = "Error"; this.stack = <call stack>; } }
在上述语法中,'stack'属性是非标准属性。仅Firefox浏览器支持它。
使用Error类的实例创建自定义错误
创建自定义错误最简单的方法是创建Error类的实例并更改其属性。
语法
您可以按照以下语法通过更改Error类实例的属性来创建自定义错误。
const customError = new Error(message); customError.name = "CustomError";
在这里,我们创建了'Error'类的实例,并将'message'作为参数传递。此外,我们还更改了'name'属性的值。同样,如果您不想将其作为Error()构造函数参数传递,则可以更改'message'属性的值。
参数
message − 这是一个表示错误的文本消息。
示例
在下面的代码中,我们创建了Error类的实例,并将其存储在'customError'变量中。之后,我们将'name'属性的值更改为'CustomError'。
在try{}块中,我们使用了'throw'语句来抛出自定义错误,在catch{}块中,我们打印错误名称和消息。
<html> <body> <div id = "output"> </div> <script> const customError = new Error("This is a custom error"); customError.name = "CustomError"; try { throw customError; } catch (err) { document.getElementById("output").innerHTML = err; } </script> </body> </html>
输出
CustomError: This is a custom error
使用函数构造函数创建自定义错误
您可以使用函数构造函数来创建对象的模板。函数构造函数应包含'name'和'message'属性。
接下来,您可以使用Error类的原型更改函数构造函数的原型。
语法
您可以按照以下语法使用函数类的构造函数创建自定义错误。
function validationError(messag, name) { this.message = messag; this.name = name; } validationError.prototype = Error.prototype;
在上述语法中,我们定义了validationError()函数,它接受message和name作为参数。之后,我们用参数值初始化函数的message和name属性。
接下来,我们使用Error类的原型更改函数的原型。
示例
在下面的代码中,我们定义了validationError()函数构造函数,并使用Error类的原型继承它。
在try{}块中,我们定义了'str'变量并用数值初始化它。之后,我们使用typeof运算符验证'str'变量的类型。如果不是字符串,则通过传递message和name作为参数来抛出'validationError'。
在catch{}块中,我们在网页上打印消息。您可以运行代码,并在输出中观察错误。
<html> <body> <div id = "demo"> </div> <script> const output = document.getElementById("demo"); function validationError(message = "", name = "validationError") { this.message = message; this.name = name; } validationError.prototype = Error.prototype; try { let str = 10; if (typeof str != "string") { throw new validationError("Not a string", "NotStringError"); } else { output.innerHTML = "String is valid"; } } catch (e) { output.innerHTML = e.name + ": " + e.message; } </script> </body> </html>
输出
NotStringError: Not a string
通过扩展Error类创建自定义错误
创建自定义错误的最佳方法是创建一个新类,并使用'extends'关键字扩展它。它使用了继承的概念,自定义错误类继承了Error类的属性。
在constructor()函数中,您可以初始化自定义错误类的属性。
语法
您可以按照以下语法通过扩展Error类来创建自定义错误。
class CustomError extends Error { constructor(message) { super(message) // Initialize properties } }
在上面的代码中,我们使用super()方法调用父类构造函数。
您也可以在构造函数中初始化CustomError类的属性。
您可以根据需要使用以上任何方法创建自定义错误。