JavaScript错误对象研究及基本介绍02_ReferenceError_SyntaxError_TypeError_URIError

JavaScript错误对象研究及基本介绍02:ReferenceError、SyntaxError、TypeError、URIError

在JavaScript开发过程中,我们经常会遇到各种各样的错误。理解这些错误的类型和特性,对于调试和编写健壮的代码至关重要。在上一篇文章中,我们介绍了 ErrorAggregateErrorEvalErrorRangeError。本篇文章将继续探讨 JavaScript 中的其他常见错误对象,包括:

  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

通过对这些错误对象的深入研究,我们将了解它们的产生原因、特性,以及如何有效地捕获和处理它们。

一、ReferenceError 对象

1. 基本介绍

ReferenceError 对象在尝试引用一个未声明的变量或作用域中不存在的变量时抛出。它表示在引用(访问)一个不存在的变量时发生的错误。

2. 语法

new ReferenceError([message[, fileName[, lineNumber]]])
  • message(可选):描述错误的字符串。
  • fileName(可选):发生错误的文件名(非标准,浏览器特定)。
  • lineNumber(可选):发生错误的行号(非标准,浏览器特定)。

3. 示例代码

示例1:引用未声明的变量
try {
  console.log(nonExistentVariable);
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: ReferenceError: nonExistentVariable is not defined
示例2:作用域问题
function testScope() {
  try {
    console.log(innerVariable);
    let innerVariable = 5;
  } catch (e) {
    console.error(e.name + ': ' + e.message);
  }
}
testScope();
// 输出: ReferenceError: Cannot access 'innerVariable' before initialization

二、SyntaxError 对象

1. 基本介绍

SyntaxError 对象在解析代码时发生语法错误时抛出。它表示代码在语法上不符合 JavaScript 语言规范,无法被解析。

2. 语法

new SyntaxError([message[, fileName[, lineNumber]]])

3. 示例代码

示例1:缺少括号
try {
  eval('function test() { console.log("Hello" }');
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: SyntaxError: Unexpected token '}'
示例2:意外的标识符
try {
  eval('var 1num = 5;');
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: SyntaxError: Unexpected number

三、TypeError 对象

1. 基本介绍

TypeError 对象在变量或参数不是预期类型时抛出,或者当使用的值不符合预期类型时发生错误。

2. 语法

new TypeError([message[, fileName[, lineNumber]]])

3. 示例代码

示例1:对非函数类型调用
try {
  var num = 5;
  num();
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: TypeError: num is not a function
示例2:读取未定义的属性
try {
  var obj = null;
  console.log(obj.property);
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: TypeError: Cannot read property 'property' of null
示例3:对非对象设置属性
try {
  var num = 5;
  num.property = 'value';
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 在严格模式下,会抛出 TypeError
if (obj && obj.property) {
  // 安全地访问 obj.property
}

四、URIError 对象

1. 基本介绍

URIError 对象在全局的 URI 处理函数(decodeURIdecodeURIComponentencodeURIencodeURIComponent)使用不正确时抛出。

2. 语法

new URIError([message[, fileName[, lineNumber]]])

3. 示例代码

示例1:错误的 URI 编码
try {
  decodeURIComponent('%');
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: URIError: URI malformed
示例2:非法的字符编码
try {
  decodeURI('%E0%A4%A');
} catch (e) {
  console.error(e.name + ': ' + e.message);
}
// 输出: URIError: URI malformed
function safeDecodeURIComponent(uri) {
  try {
    return decodeURIComponent(uri);
  } catch (e) {
    console.error('无法解码 URI: ' + uri);
    return null;
  }
}

五、总结

  • ReferenceError:当引用未声明的变量或作用域中不存在的变量时抛出。
  • SyntaxError:当代码的语法不正确,无法被解析时抛出。
  • TypeError:当变量或参数不是预期类型,或操作不支持时抛出。
  • URIError:当 URI 处理函数使用不当,导致编码或解码失败时抛出。

参考资料

  • MDN Web Docs - ReferenceError
  • MDN Web Docs - SyntaxError
  • MDN Web Docs - TypeError
  • MDN Web Docs - URIError

上一篇:Java jsp + minio 实现 文件上传


下一篇:​面向异构硬件架构:软件支撑和优化技术