某集团面试官问:报错排查一般都有哪些

227 阅读3分钟

1.ReferenceError错误类型

ReferenceError 是 JavaScript 中的一种错误类型,当一个不存在(或者尚未声明)的变量被引用时,JavaScript 引擎会抛出这种错误。

以下是一些导致 ReferenceError 的常见情况:

  • 变量未声明:在变量被声明之前就尝试访问它。

console.log(x); // ReferenceError: x is not defined
  • 拼写错误:变量名或函数名拼写错误。

var colour = 'red';
console.log(cololr); // ReferenceError: cololr is not defined
  • 作用域问题:在错误的范围内引用变量。

function example() {
    var localVariable = 'I am local';
}
console.log(localVariable); // ReferenceError: localVariable is not defined
  • 删除未声明的变量:尝试删除一个未被声明的变量。

delete undefinedVariable; // ReferenceError: delete of an unqualified identifier in strict mode
  • 在严格模式下的错误使用:在严格模式下,一些不符合规范的代码会抛出 ReferenceError

'use strict';
var obj = {};
with (obj) { // ReferenceError: with statement is not allowed in strict mode
    x = 1;
}

处理 ReferenceError 的方法:

  • 确保变量在使用之前已经被声明。

  • 仔细检查代码,避免拼写错误。

  • 理解 JavaScript 的作用域规则,确保在正确的范围内访问变量。

  • 避免在严格模式下使用被废弃的语法。

在编写代码时,使用编辑器的自动完成功能和静态代码分析工具可以帮助你避免这类错误。如果错误发生了,通常错误信息会指出问题所在,你可以根据提示找到并修复问题。

2.其他错误类型

在JavaScript中,除了ReferenceError之外,还有以下几种常见的错误类型:

  • SyntaxError

  • 当代码中存在语法错误时,JavaScript 引擎会抛出 SyntaxError

  • 例如,遗漏括号、分号、关键字拼写错误等。


var x = 5
if(x = 6) { // SyntaxError: Unexpected token '='
    console.log('This will not execute');
}
  • TypeError

  • 当值的类型非预期,或者对某值执行了不合适的方法时,会抛出 TypeError

  • 例如,尝试对一个非函数的值进行函数调用,或者对非对象使用点操作符。


var num = 10;
num(); // TypeError: num is not a function
  • RangeError

  • 当一个值超出其有效范围时,会抛出 RangeError

  • 例如,创建一个超出 JavaScript 数值范围的数组。


new Array(-1); // RangeError: Invalid array length
  • URIError

  • 当使用全局 encodeURI()decodeURI() 函数,并且传入的参数格式不正确时,会抛出 URIError

  • 例如,尝试对包含非法字符的 URI 进行编码或解码。


decodeURI('%E0%A4%A'); // URIError: URI malformed
  • EvalError

  • 当使用 eval() 函数时发生错误,会抛出 EvalError

  • 这个错误在现代 JavaScript 中不常见,因为 eval() 的使用已经非常有限。


eval('invalid code'); // EvalError: The 'eval' function cannot be used in an indirect way
  • AggregateError(在较新的JavaScript版本中):

  • 当多个错误需要作为一个单一的错误抛出时,可以使用 AggregateError

  • 这允许错误处理函数处理多个错误,而不是单个错误。


try {
    throw new AggregateError([new Error('First error'), new Error('Second error')], 'Multiple errors occurred');
} catch (error) {
    console.log(error.errors); // Array of errors
}

理解这些错误类型,并能够根据错误信息诊断问题,是编写稳定、可靠 JavaScript 代码的关键。使用 try...catch 语句可以帮助捕获和处理这些错误,从而避免程序崩溃。