抓住异常,解救你的代码世界:你应该了解的 JavaScript 异常类型

简介: 抓住异常,解救你的代码世界:你应该了解的 JavaScript 异常类型

JavaScript 中有多种异常类型,以下是其中一些常见的异常类型:

1. Error(错误)

Error 是 JavaScript 中最基本的异常类型,其他异常类型都继承自 Error 类型。它可以通过 throw 语句手动抛出,或者由 JavaScript 运行时自动抛出。

以下是几个可能导致错误的 JavaScript 代码案例:

  1. 未定义的变量:
console.log(x); // ReferenceError: x is not defined
  1. 方法不存在:
var obj = {};
obj.doSomething(); // TypeError: obj.doSomething is not a function
  1. 类型不匹配:
var num = "123";
console.log(num.toUpperCase()); // TypeError: num.toUpperCase is not a function
  1. 数组越界:
var arr = [1, 2, 3];
console.log(arr[5]); // undefined (没有错误),因为访问了不存在的索引
  1. 调用栈溢出(递归无限循环):
function foo() {
  foo();
}
foo(); // RangeError: Maximum call stack size exceeded
  1. JSON 解析错误:
var invalidJson = "{ key: 'value' }";
JSON.parse(invalidJson); // SyntaxError: Unexpected token k in JSON at position 2

这些只是常见的一些示例,JavaScript 中的错误类型还有很多。处理异常情况的最佳做法是使用 try-catch 块捕获和处理错误,以保证代码的稳定性和可靠性。

2. SyntaxError(语法错误)

语法错误通常在代码中存在语法错误时抛出。例如,括号未正确匹配、缺少分号等。

以下是几个可能导致语法错误的 JavaScript 代码案例:

  1. 括号不匹配:
console.log('Hello World'; // SyntaxError: Unexpected token ;
  1. 缺少分号:
var x = 5
console.log(x); // SyntaxError: Missing semicolon
  1. 不完整的函数定义:
function myFunction() {
  console.log('Hello World');
// SyntaxError: Unexpected end of input
  1. 错误的对象字面量语法:
var obj = {
  name: 'John'
  age: 30
}; // SyntaxError: Unexpected token :
  1. 非法的变量命名:
var 123abc = 'Hello'; // SyntaxError: Unexpected number
  1. 字符串引号不匹配:
var str = "Hello'; // SyntaxError: Unexpected string
  1. 关键字用作变量名:
var var = 'test'; // SyntaxError: Unexpected token var

这些是常见的一些导致语法错误的 JavaScript 代码示例。当遇到语法错误时,JavaScript 解析器无法理解代码,因此会抛出 SyntaxError 异常。在编写代码时,请仔细检查语法,并使用开发工具中的代码高亮和错误提示来帮助识别和解决语法错误。

3. TypeError(类型错误)

类型错误通常在使用了错误的数据类型或对某个值执行了不支持的操作时抛出。例如,对 undefined 或 null 值进行属性访问、调用非函数对象等。

以下是几个可能导致类型错误的 JavaScript 代码案例:

  1. 尝试调用非函数对象:
var x = 5;
x(); // TypeError: x is not a function
  1. 使用未定义的变量作为对象:
var obj;
obj.property = 123; // TypeError: Cannot set property 'property' of undefined
  1. 数组调用方法时使用错误的数据类型:
var arr = [1, 2, 3];
arr.toUpperCase(); // TypeError: arr.toUpperCase is not a function
  1. 对象属性访问时使用错误的数据类型:
var person = {
  name: "John",
  age: 30
};
console.log(person.name()); // TypeError: person.name is not a function
  1. 非法的操作符使用:
var x = "Hello";
var y = x - 5; // TypeError: Cannot convert string to number
  1. 函数参数类型不匹配:
function addNumbers(a, b) {
  return a + b;
}
addNumbers("1", 2); // TypeError: Cannot convert string to number

这些是常见的一些导致类型错误的 JavaScript 代码示例。处理类型错误的最佳做法是确保变量和对象具有正确的类型,并使用条件语句或强制类型转换来避免类型不匹配的操作。

4. ReferenceError(引用错误)

引用错误通常在引用了不存在的变量或函数时抛出。例如,访问未声明的变量或函数

以下是几个可能导致引用错误的 JavaScript 代码案例:

  1. 引用不存在的变量:
console.log(x); // ReferenceError: x is not defined
  1. 引用未声明的函数:
myFunction(); // ReferenceError: myFunction is not defined
var myFunction = function() {
  console.log('Hello World');
};
  1. 访问不存在的对象属性:
var obj = { name: 'John' };
console.log(obj.age); // ReferenceError: age is not defined
  1. 访问原型链上不存在的属性:
function Person(name) {
  this.name = name;
}
var person = new Person('John');
console.log(person.age); // ReferenceError: age is not defined
  1. 引用块级作用域外的变量:
if (true) {
  var x = 5;
}
console.log(x); // ReferenceError: x is not defined

这些是常见的一些导致引用错误的 JavaScript 代码示例。在编写代码时,请确保所有引用的变量、函数和属性都已经声明或存在,避免在作用域外部引用变量,并注意检查对象的属性是否存在。

5. RangeError(范围错误)

范围错误通常在使用了超出有效范围的值时抛出。例如,使用了超出数组边界的索引、传递了超出函数参数有效范围的值等。

以下是几个可能导致范围错误的 JavaScript 代码案例:

  1. 数组索引超出范围:
var arr = [1, 2, 3];
console.log(arr[5]); // RangeError: Index out of range
  1. 递归调用无限循环:
function infiniteLoop() {
  infiniteLoop();
}
infiniteLoop(); // RangeError: Maximum call stack size exceeded
  1. 设置超出有效日期范围的日期:
var date = new Date(2021, 13, 32);
console.log(date); // RangeError: Invalid date
  1. 调用函数时传递了过多的参数:
function sum(a, b) {
  return a + b;
}
sum(1, 2, 3, 4, 5); // RangeError: Too many arguments
  1. 数字超出了有效范围:
console.log(Number.MAX_SAFE_INTEGER + 1); // RangeError: BigInt number cannot be safely represented in JavaScript

这些是常见的一些导致范围错误的 JavaScript 代码示例。处理范围错误的最佳做法是确保数组索引和数字值在有效范围内,避免无限循环和超出有效范围的操作。在使用内置对象(如日期)时,确保传递的参数在有效范围内。如果需要处理大整数,请考虑使用 BigInt 类型来处理超过安全整数范围的数字。

6. EvalError(eval 错误)

EvalError 在使用 eval() 函数时发生错误时抛出,但在现代 JavaScript 中很少使用。

在最新的 ECMAScript 标准中,EvalError 已经被废弃并不再被使用。因此,在现代的 JavaScript 环境中,很少会出现 EvalError。

在过去,EvalError 通常用于表示与 eval() 函数相关的错误。这个错误类型已经被语法错误和运行时错误所取代。下面是一些可能导致 EvalError 的旧代码示例:

  1. 错误的 eval() 语法:
eval("1 +"); // EvalError: Unexpected end of input
  1. eval() 函数在严格模式下使用了声明语句:
"use strict";
eval("var x = 5;"); // EvalError: Cannot create variables in strict mode
  1. eval() 函数包含无效的 JavaScript 代码:
eval("10 *"); // EvalError: Invalid or unexpected token

需要注意的是,EvalError 在现代的 JavaScript 中已经被废弃,因此不建议在代码中使用它。相反,应该根据具体情况处理语法错误或运行时错误。

除了以上常见的异常类型,还有一些其他的异常类型,如 URIError(URI 错误)和 AggregateError(聚合错误)。URIError 在处理 URI 相关的操作时抛出,AggregateError 是在多个错误被捕获时封装了这些错误的对象。

通过捕获和处理异常,我们可以在运行时发生错误时采取相应的措施,例如给出适当的错误提示、回退到备用方案或记录错误日志。

相关文章
|
19天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
23天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
11 0
|
1月前
|
存储 JavaScript 前端开发
非常实用的JavaScript一行代码(整理总结)
非常实用的JavaScript一行代码(整理总结)
30 0
|
25天前
|
JavaScript 前端开发
JavaScript 中如何检测一个变量是一个 String 类型?
JavaScript 中如何检测一个变量是一个 String 类型?
21 2
|
23天前
|
JavaScript 前端开发
JavaScript数组的功能内置类型
数组是JavaScript的内置类型,JavaScript数组的功能特别强大。下面简单介绍一下JavaScript数组。
|
25天前
|
存储 JavaScript 前端开发
JavaScript 中松散类型的理解
JavaScript 中松散类型的理解
26 3
|
1月前
|
JSON 前端开发 JavaScript
16个重要的JavaScript代码
16个重要的JavaScript代码
32 1
|
1月前
|
JavaScript
当当网新用户注册界面——JS代码
当当网新用户注册界面——JS代码
7 0
|
1月前
|
JavaScript
当当网首页——JS代码
当当网首页——JS代码
13 1
|
1月前
|
JavaScript Java
什么?java中居然可以执行js代码了?真是不知者不怪
什么?java中居然可以执行js代码了?真是不知者不怪
13 1