错误对象是一种特殊的基本对象。它们拥有基本的 Error 类型,同时也有多种具体的错误类型。

标准文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects

  • Error
    定义:通过Error的构造器可以创建一个错误对象。当运行时错误产生时,Error的实例对象会被抛出。Error对象也可用于用户自定义的异常的基础对象,Error.name的六种值对应的信息,即以下的Error

  • 官方案例

//抛出一个基本错误
通常你会使用throw关键字来抛出你创建的Error对象。可以使用 try...catch 结构来处理异常:
try {throw new Error("Whoops!");
} catch (e) {alert(e.name + ": " + e.message);
}
//处理一个特定错误
你可以通过判断异常的类型来特定处理某一类的异常,即判断 constructor 属性,当使用现代Javascript引擎时,可使用instanceof 关键字:
try {foo.bar();
} catch (e) {if (e instanceof EvalError) {alert(e.name + ": " + e.message);} else if (e instanceof RangeError) {alert(e.name + ": " + e.message);}// ... etc
}
//自定义异常类型
你可能希望自定义基于Error的异常类型,使得你能够 throw new MyError() 并可以使用 instanceof MyError 来检查某个异常的类型. 这种需求的通用解决方法如下
// Create a new object, that prototypally inherits from the Error constructor.
function MyError(message) {this.name = 'MyError';this.message = message || 'Default Message';this.stack = (new Error()).stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.constructor = MyError;try {throw new MyError();
} catch (e) {console.log(e.name);     // 'MyError'console.log(e.message);  // 'Default Message'
}try {throw new MyError('custom message');
} catch (e) {console.log(e.name);     // 'MyError'console.log(e.message);  // 'custom message'
}
  • AggregateError (集合误差)
    定义:表示需要在一个错误中包装多个错误时的一个错误;当多个错误​​需要包装在一个错误中时,该对象表示一个错误。

  • 官方案例

//新建AggregateError
try {throw new AggregateError([new Error("some error"),], 'Hello');
} catch (e) {console.log(e instanceof AggregateError); // trueconsole.log(e.message);                   // "Hello"console.log(e.name);                      // "AggregateError"console.log(e.errors);                    // [ Error: "some error" ]
}
//捕获AggregateError
Promise.any([Promise.reject(new Error("some error")),
]).catch(e => {console.log(e instanceof AggregateError); // trueconsole.log(e.message);                   // "All Promises rejected"console.log(e.name);                      // "AggregateError"console.log(e.errors);                    // [ Error: "some error" ]
});
  • 学习用例
参考网站:https://www.bookstack.cn/read/es6-3rd/spilt.9.docs-promise.md
  • EvalError
    定义:代表了一个关于 eval 函数的错误.此异常不再会被JavaScript抛出,但是EvalError对象仍然保持兼容性
    较新版本的JavaScript不会抛出EvalError,改为SyntaxError
  • 官方案例
//创建EvalError
try {throw new EvalError('Hello', 'someFile.js', 10);
} catch (e) {console.log(e instanceof EvalError); // trueconsole.log(e.message);              // "Hello"console.log(e.name);                 // "EvalError"console.log(e.fileName);             // "someFile.js"console.log(e.lineNumber);           // 10console.log(e.columnNumber);         // 0console.log(e.stack);                // "@Scratchpad/2:2:9\n"
}
  • RangeError
    定义:标明一个错误,当一个值不在其所允许的范围或者集合中
  • 官方案例
//创建RangeError
var check = function(num) {if (num < MIN || num > MAX) {throw new RangeError('Parameter must be between ' + MIN + ' and ' + MAX);}
};try {check(500);
}
catch (e) {if (e instanceof RangeError) {// 处理越界错误}
}
  • 学习用例
var num = 1;
try {num.toPrecision(500);   // 一个数字不能有500位有效数字
}
catch(err) {console.log(err.name);
}
结果:RangeError
  • ReferenceError
    定义:代表当一个不存在的变量被引用时发生的错误
  • 官方案例
//捕获Reference
try {var a = undefinedVariable;
} catch (e) {console.log(e instanceof ReferenceError); // trueconsole.log(e.message);                   // "undefinedVariable is not defined"console.log(e.name);                      // "ReferenceError"console.log(e.fileName);                  // "Scratchpad/1"console.log(e.lineNumber);                // 2console.log(e.columnNumber);              // 6console.log(e.stack);                     // "@Scratchpad/2:2:7\n"
}
//创建ReferenceError
try {throw new ReferenceError('Hello', 'someFile.js', 10);
} catch (e) {console.log(e instanceof ReferenceError); // trueconsole.log(e.message);                   // "Hello"console.log(e.name);                      // "ReferenceError"console.log(e.fileName);                  // "someFile.js"console.log(e.lineNumber);                // 10console.log(e.columnNumber);              // 0console.log(e.stack);                     // "@Scratchpad/2:2:9\n"
}
  • 学习用例
var x;
try {x = y + 1;   // y无法引用(使用)
}
catch(err) {console.log(err.name);
}
结果:ReferenceError
  • SyntaxError
    定义:对象代表尝试解析语法上不合法的代码的错误
  • 当Javascript语言解析代码时,Javascript引擎发现了不符合语法规范的tokens或token顺序时抛出SyntaxError
  • 官方案例
//捕获 SyntaxError
try {eval('hoo bar');
} catch (e) {console.log(e instanceof SyntaxError); // trueconsole.log(e.message);                // "missing ; before statement"console.log(e.name);                   // "SyntaxError"console.log(e.fileName);               // "Scratchpad/1"console.log(e.lineNumber);             // 1console.log(e.columnNumber);           // 4console.log(e.stack);                  // "@Scratchpad/1:2:3\n"
}
//创建 SyntaxError
try {throw new SyntaxError('Hello', 'someFile.js', 10);
} catch (e) {console.log(e instanceof SyntaxError); // trueconsole.log(e.message);                // "Hello"console.log(e.name);                   // "SyntaxError"console.log(e.fileName);               // "someFile.js"console.log(e.lineNumber);             // 10console.log(e.columnNumber);           // 0console.log(e.stack);                  // "@Scratchpad/2:11:9\n"
}
  • 学习用例
try {eval("alert('Hello)");   // 缺少'会产生错误   'Hello 不是完整的字符串 'Hello' 因此报错
}
catch(err) {console.log(err.name);
}
结果:SyntaxError
  • TypeError
    定义:对象用来表示值的类型非预期类型时发生的错误
  • 官方案例
//捕获TypeError
try {null.f();
} catch (e) {console.log(e instanceof TypeError); // trueconsole.log(e.message);              // "null has no properties"console.log(e.name);                 // "TypeError"console.log(e.fileName);             // "Scratchpad/1"console.log(e.lineNumber);           // 2console.log(e.columnNumber);         // 2console.log(e.stack);                // "@Scratchpad/2:2:3\n"
}
//创建TypeError
try {throw new TypeError('Hello', "someFile.js", 10);
} catch (e) {console.log(e instanceof TypeError); // trueconsole.log(e.message);              // "Hello"console.log(e.name);                 // "TypeError"console.log(e.fileName);             // "someFile.js"console.log(e.lineNumber);           // 10console.log(e.columnNumber);         // 0console.log(e.stack);                // "@Scratchpad/2:2:9\n"
}
  • 学习用例
var num = 1;
try {num.toUpperCase();   // 您无法将数字转换为大写
}
catch(err) {console.log(err.name);
}
结果: TypeError
  • URLError
    定义:URIError 对象用来表示以一种错误的方式使用全局URI处理函数而产生的错误
  • 官方案例
//捕获URIError
try {decodeURIComponent('%');
} catch (e) {console.log(e instanceof URIError); // trueconsole.log(e.message);             // "malformed URI sequence"console.log(e.name);                // "URIError"console.log(e.fileName);            // "Scratchpad/1"console.log(e.lineNumber);          // 2console.log(e.columnNumber);        // 2console.log(e.stack);               // "@Scratchpad/2:2:3\n"
}
//创建URIError
try {throw new URIError('Hello', 'someFile.js', 10);
} catch (e) {console.log(e instanceof URIError); // trueconsole.log(e.message);             // "Hello"console.log(e.name);                // "URIError"console.log(e.fileName);            // "someFile.js"console.log(e.lineNumber);          // 10console.log(e.columnNumber);        // 0console.log(e.stack);               // "@Scratchpad/2:2:9\n"
}
  • 学习用例
try {decodeURI("%%%");   // 您不能URI解码百分号  如果在URI函数中使用非法字符,则抛出URIError
}
catch(err) {console.log(err.name);
}
结果:URIError

具体可以参考标准内置对象 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Error

最近看到一篇帖子,关于这方面的问题,分享给大家 https://mp.weixin.qq.com/s/FbMv8YH6AVHxCeBYE1NzRw

JavaScript---错误对象相关推荐

  1. JavaScript错误对象

    JavaScript gives us 8 error objects, which are raised in a try/catch expression depending on the err ...

  2. 主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?

    每当 JavaScript 中发生任何运行时错误时,都会引发Error对象.在许多情况下,我们还可以扩展这些标准Error对象,以创建我们自己的自定义Error对象. 属性 Error 对象具有2个属 ...

  3. JavaScript 复制对象与Object.assign方法无法实现深复制

    在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数据类型.基本数据类型包括Number.Boolean.String.Null.String.Symbol(ES6 新增),而复 ...

  4. javascript笔记:深入分析javascript里对象的创建(上)续篇

    今天回来一看我的博客居然有这么多人推荐真是开心极了,看来大家对我的研究有了认可,写博客的动力越来越大了,而且我发现写javascript在博客园里比较受欢迎,写java的受众似乎少多了,可能博客园里j ...

  5. 浅谈JavaScript错误

    本文主要从前端开发者的角度谈一谈大多数前端开发者都会遇到的js错误,对错误产生的原因.发生阶段,以及如何应对错误进行分析.归纳和总结,希望得到一些有益的结论用来指导日常开发工作. 概念辨析 错误(Er ...

  6. javascript 错误与调试

    1.JavaScript 错误 - throw.try 和 catch try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 1.1 JavaScript 错误 ...

  7. 【转】调试JavaScript 错误的解决方案

    A  使用alert() 和document.write() 方法监视变量值 如果要中断代码的运行,监视变量的值,则使用alert() 方法: 如果需要查看的值很多,则使用document.write ...

  8. JavaScript系列-----对象基于哈希存储(Key,Value之Key篇) (1)

    1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...

  9. javascript错误处理与调试

    视频课堂https://edu.csdn.net/course/play/7621 在程序开发中难免会遇到一些错误,在成千上万的代码中去寻找错误很明显相当于大海捞针,为此,每种计算机编程语言都要它独特 ...

  10. javascript --- 事件对象和事件类型

    // 无论程序使用"DOM0级"规范还是"DOM2级"规范,都会在局部产生一个event对象, // 将其打印出来研究: <div id="di ...

最新文章

  1. 使用read write 读写socket
  2. 【SAP-PM模块】维护业务处理流程
  3. SpringMVC文件上传下载和拦截器
  4. java.util -- List接口
  5. 方法覆盖(方法重写)
  6. TensorFlow保存和载入训练模型
  7. 用自己的数据集训练Mask-RCNN实现过程中的坑
  8. 服务器 通知系统设计,组列表管理服务器的设计与实现
  9. 财务想转行?SAP咨询顾问了解一下
  10. html隐藏图片白色部分,css去掉gif透明图片的白边
  11. 教师计算机基础培训心得,教师集中培训心得体会
  12. 基于web的网页问卷调查设计_Python3菜鸟教程丨基于Web模块的轻量级接口设计基础...
  13. A New Voyage
  14. 使用pandoc 生成带中文的pdf
  15. 【渝粤教育】国家开放大学2018年秋季 8180-22T (1)畜禽生产概论 参考试题
  16. 人物动作姿势怎么画?
  17. 数据集:KITTI数据集分析
  18. 小学就会背的乘法表,还藏着这么多秘密?
  19. Activiti6 流程模型图中文显示为方块□□
  20. 服务器正在维护中王者荣耀,王者荣耀7月服务器正在维护中_王者荣耀7月3日服务器正在维护中解决方法_游戏吧...

热门文章

  1. 第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的时态)
  2. 一次因时区引发的血案
  3. 2020-10-22从np.random.normal()到正态分布的拟合
  4. 宝付上海宝付商家吐槽自动扣费的真面目
  5. 打码色带在包装行业的应用
  6. BlockChain:2020年7月10日世界人工智能大会WAIC《链智未来 赋能产业区块链主题论坛》(四)
  7. IBM小型机AIX操作系统总结10–备份恢复
  8. logback--进阶--05--自定义Appenders
  9. java计算机毕业设计高校后勤保修系统源码+mysql数据库+系统+lw文档+部署
  10. linux NFS加密krb5p