JavaScript 错误类型归类

·

2 min read

SyntaxError(语法错误)

在解析代码时候发生的语法错误, 比如

function fn(){
    let a = 
}
fn();

错误信息 Uncaught SyntaxError: Unexpected token '}'

TypeError(类型错误)

变量或者参数不是预期的类型时发生的错误, 比如在字符串上调用数组的方法.

let a = 1234;
a.contact(5);
// undefined上调用也会
console.log(window.aaa.s)

错误信息 Uncaught TypeError: a.contact is not a function Uncaught TypeError: Cannot read property 's' of undefined

RangeError(范围错误)

当一个值超出有效范围时候发生的错误, 比如数组的长度为 -1

const a = new Array(-1);

错误信息 Uncaught RangeError: Invalid array length

不过使用Array.form({ length: -2 })的方式不会报该错误; const arr = Array.from({ length: -2 }); console.log(arr); // []

ReferenceError(引用错误)

当引用一个不存在的变量时发生的错误;

console.log(ss);
function name() {
    console.log(1)
}
name1()

错误信息 Uncaught ReferenceError: ss is not defined

EvalError(执行错误)

eval函数没有被正确执行时抛出的错误

new eval();
eval = () => {};

错误信息 Uncaught TypeError: eval is not a constructor

EvalError错误类型现在已经过时,不再使用了; 但是为了兼容以前代码才保留; 所以看到的是TypeError错误

URIError(URI错误)

调用 decodeURI encodeURI decodeURIComponent 一类浏览器提供方法报错 decodeURIComponent('%')

错误信息 Uncaught URIError: URI malformed Filed to load resource(资源加载错误)

video input img object script style audio等标签加载资源出错时抛出的错误;

当加载跨域资源时候, 使浏览器不报此错误, 可以在需要的元素上加上crossorigin; 同时服务端响应头设置 Access-Control-Allow-Origin为*, 才能保证浏览器加载跨域资源请求时不报错;