JavaScript 中常见的错误类型
转载
JavaScript 中常见的错误类型。
ECMA-262 定义了 7 种错误类型:
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
1、SyntaxError (语法错误)
// 缺少符号
console.log ('hello';
// Uncaught SyntaxError: missing ) after argument list
// 变量错误
// Uncaught SyntaxError: Invalid or unexpected token
var 1a = 'test'// JSON.parse 参数不合法 // Uncaught SyntaxError: Unexpected end of JSON input JSON.parse('')
//给关键字赋值
function = 5 // Uncaught SyntaxError: Unexpected token =
变量命名规范
由字母(A-Za-z)、数字(0-9)、下划线(_)、美元符号( $ )组成,如:usrAge, num01, _name
严格区分大小写。var app; 和 var App; 是两个变量
不能 以数字开头。 18age 是错误的
不能 是关键字、保留字。例如:var、for、while
变量名必须有意义。 MMD BBD nl → age
遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。 myFirstName
推荐翻译网站: 有道 爱词霸
2、ReferenceError (引用错误)
引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。
2.1 引用了不存在的变量
a(); // Uncaught ReferenceError: a is not defined
console.log(b); // Uncaught ReferenceError: b is not defined
2.2 给一个无法被赋值的对象赋值
3、TypeError (类型错误)
// 类型调用错误
// Uncaught TypeError: Object.test is not a function
// test 未定义,应该是undefined,这里作为函数调用
Object.test()
// undefined 上面引用某一个属性
// Uncaught TypeError: Cannot read property 'a' of undefined
var test = undefined;
var t = test.a;
var test = {}
var t = test.test.a;
// null 上面引用某一个属性(虽然 null typeof 是对象,但是也会报错)
// Uncaught TypeError: Cannot read property 'a' of null
var test = null
var t = test.a
3.1 调用不存在的方法
123(); // Uncaught TypeError: 123 is not a function
var o = {};
o.run(); // Uncaught TypeError: o.run is not a function
3.2 new 关键字后接基本类型
4、RangeError (范围越界错误)/ URIError (URI不正确)
`
RangeError 是当一个只超出有效范围时发生的错误。主要的有几种情况,第一是数组长度为负数,第二是 Number 对象的方法参数超出范围,以及函数堆栈超过最大值。
// Uncaught RangeError: Invalid array length
new Array(-1)
//值有问题的意思
//你还能创建一个负长度的数组吗
// Uncaught URIError: URI malformed
decodeURI('%dfd')
4.1 数组长度为负数
[].length = -5; // Uncaught RangeError: Invalid array length
4.2 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.
5、 URIError(URL 错误):
主要是相关函数的参数不正确。
decodeURI("%"); // Uncaught URIError: URI malformed at decodeURI
::: tip 提醒: URI 相关参数不正确时抛出的错误,主要涉及 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和 unescape()六个函数。 :::
6、EvalError eval()(函数执行错误):
在 ES5 以下的 JavaScript 中,当 eval()函数没有被正确执行时,会抛出 evalError 错误。例如下面的情况:
var myEval = eval;
myEval("alert('call eval')");
需要注意的是:ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。
::: warning 善用 try-catch 在明明知道某个地方会产生错误,可以通过修改代码来解决的地方,是不适合用 try-catch 的。或者是那种不同浏览器兼容性错误导致错误的也不太适合,因为可以通过判断浏览器或者判断这款浏览器是否存在此属性和方法来解决。 :::
new Error("出错了!");
new RangeError("出错了,变量超出有效范围!");
new TypeError("出错了,变量类型无效!");
上面代码表示新建错误对象的实例,实质就是手动抛出错误。可以看到,错误对象的构造函数接受一个参数,代表错误提示信息(message)。