ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # Error ## 参数 `message`:可选的. 可阅读的错误描述信息 <br> `fileName`:可选的. 包含引发异常的代码的文件名 <br> `lineNumber`:可选的.包含引发异常的代码的行号 <br> ## 属性 `Error.prototype `:允许添加属性到Error实例。 <br> <br> # Error实例 ## 属性 `SyntaxError.prototype.constructor `:创建实例的构造函数. <br> `SyntaxError.prototype.message `:错误信息. 尽管 ECMA-262 指出, SyntaxError 应该提供其子什么的信息属性,但在 SpiderMonkey 中, 仍是继承自Error.prototype.message. <br> `SyntaxError.prototype.name `:错误的名称.继承自 Error. <br> `SyntaxError.prototype.fileName `:抛出该异常的文件路径.继承自 Error. <br> `SyntaxError.prototype.lineNumber `:抛出该异常的文件的行号. 继承自 Error. <br> `SyntaxError.prototype.columnNumber `:抛出该异常的文件的列数. 继承自 Error. <br> `SyntaxError.prototype.stack `:栈追踪信息. 继承自 Error. <br> <br> # 错误类型 ## SyntaxError 当Javascript语言解析代码时,Javascript引擎发现了不符合语法规范的tokens或token顺序时抛出`SyntaxError` <br> ~~~ // 变量名不符合规范 var 1 // Uncaught SyntaxError: Unexpected number var 1a // Uncaught SyntaxError: Invalid or unexpected token // 给关键字赋值 function = 5 // Uncaught SyntaxError: Unexpected token = ~~~ <br> ## ReferenceError 引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。 ~~~ // 引用了不存在的变量 a() // Uncaught ReferenceError: a is not defined console.log(b) // Uncaught ReferenceError: b is not defined // 给一个无法被赋值的对象赋值 console.log("abc") = 1 ~~~ <br> ## RangeError RangeError是当一个只超出有效范围时发生的错误。主要的有几种情况,第一是数组长度为负数,第二是Number对象的方法参数超出范围,以及函数堆栈超过最大值。 ~~~ // 数组长度为负数 [].length = -5 // Uncaught RangeError: Invalid array length // Number对象的方法参数超出范围 var num = new Number(12.34) console.log(num.toFixed(-1)) // Uncaught RangeError: toFixed() digits argument must be between 0 and 20 at Number.toFixed // toFixed方法的作用是将数字四舍五入为指定小数位数的数字,参数是小数点后的位数,范围为0-20. ~~~ <br> ## TypeError 变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。 ~~~ // 调用不存在的方法 123() // Uncaught TypeError: 123 is not a function var o = {} o.run() // Uncaught TypeError: o.run is not a function // new关键字后接基本类型 var p = new 456 // Uncaught TypeError: 456 is not a constructor ~~~ <br> ## URIError URI相关参数不正确时抛出的错误,主要涉及`encodeURI()`、`decodeURI()`、`encodeURIComponent()`、`decodeURIComponent()`、`escape()`和`unescape()`六个函数。 ~~~ decodeURI("%") // Uncaught URIError: URI malformed at decodeURI ~~~ <br> ## EvalError 在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。 例如下面的情况: ~~~ var myEval = eval; myEval("alert('call eval')"); ~~~ 需要注意的是:ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。 <br> <br> # 参考资料 [MDN - Error]([链接](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Error)) [JavaScript中的六种错误类型](https://www.jianshu.com/p/467b9a145dcc)