文章目录
- JS 常见报错及异常处理办法总结
- 常见js报错类型
- 异常调试及捕获
JS 常见报错及异常处理办法总结
参考资料:https://cloud.tencent.com/developer/article/1768989
常见js报错类型
- RangeError
- ReferenceError
- SyntaxError
- TypeError
RangeError
(范围错误)是一个编程术语,通常用于描述在编程中涉及范围或边界的错误或异常情况。它表示你试图访问一个数据结构中超出有效范围或界限的索引或值,或者在执行某些操作时得到的值超过了特定数据类型允许的范围。这个错误通常出现在编程语言中,用于指示代码中的问题。
具体来说,“RangeError” 可能涉及以下方面:
- 数组索引越界:最常见的情况之一是尝试访问数组或列表中的元素,但使用了一个不存在的索引或索引超出了数组的大小。
- 数值溢出:在数值计算中,有时会发生数值溢出,即计算结果超过了特定数值类型的范围。
- 递归溢出:在递归函数中,如果递归调用的次数太多,可能会导致栈溢出,这也可以被称为范围错误。
- 数据类型限制:某些数据类型(例如整数、浮点数)有特定的取值范围,如果超出这些范围,就可能触发范围错误。
ReferenceError
(引用错误)是一个编程术语,通常用于描述在编程中尝试引用一个不存在的变量或标识符时产生的错误。这意味着代码尝试使用未定义的变量、函数或对象属性,从而无法找到所引用的标识符。
当编程语言解释器或执行引擎执行代码时,如果发现一个标识符未在当前作用域中声明或定义,它将引发 “ReferenceError”。这通常是由以下几种情况引起的:
- 变量未声明:尝试使用未声明的变量。
- 函数未定义:尝试调用未定义的函数。
- 对象属性未定义:尝试访问对象的属性,但该属性未定义。
- 作用域问题:尝试访问在当前作用域之外声明的变量。
要解决 “ReferenceError”,你需要确保引用的变量、函数或属性在当前作用域中已经声明或定义。这通常涉及到在正确的位置声明变量,定义函数,或确保对象属性存在。
注意:虽然不同的编程语言可能使用不同的错误名称,但"ReferenceError"通常表示一种通用的错误类型,表示程序在运行时无法解析或找到所引用的标识符。
SyntaxError
(语法错误)是编程中的一种常见错误类型,它发生在程序代码中存在语法规则不符合语言规范的地方。这意味着编译器或解释器无法正确解析或理解代码的结构,因为它违反了编程语言的语法规则。
语法错误通常是最基本的错误之一,因为编程语言需要精确的语法来正确解释和执行代码。这些错误通常在编译代码或运行代码之前被检测到,因为它们涉及到语言的语法规则。
TypeError
(类型错误)是编程中的一个错误类型,通常指示一个操作或函数调用涉及到不兼容的数据类型。当编程语言在运行时无法执行某个操作,因为操作的数据类型不符合预期时,就会引发 TypeError。这种错误通常表示代码尝试执行一个不允许的操作或调用函数的方式是错误的。
以下是一些可能引发 TypeError 的情况:
- 类型不匹配:在某些情况下,代码可能要求使用特定数据类型,如果提供了不匹配的数据类型,就会引发 TypeError。
- 属性或方法不存在:尝试访问对象的属性或调用对象的方法,但该属性或方法不存在。
- 不支持的操作:某些操作只能应用于特定类型的数据,如果尝试对不支持的数据类型执行操作,就会引发 TypeError。
- 缺少参数:尝试调用函数时,如果未提供所需的参数,可能会引发 TypeError。
- 迭代不可迭代对象:在某些编程语言中,尝试对不可迭代的对象执行迭代操作可能导致 TypeError。
要解决 TypeError,需要查找引发错误的代码行,并确保在执行操作之前检查数据类型或确保调用的函数与数据类型兼容。在大多数编程语言中,类型检查和异常处理机制可帮助识别和处理 TypeError。如果你使用的是强类型语言,编译器通常会在编译时检测到这些错误,而在弱类型语言中,这些错误通常在运行时才会被检测到。
异常调试及捕获
try/catch
,Js中处理异常的一种模式,try
用于可能会发生错误的代码,catch
对错误的处理。
try{// 可能会导致错误的代码
}catch(error) {// 错误处理
}
实例:
try{console.log(a)
}catch(error) { // 打印错误信息throw new Error('变量a未命名!!'); // 自定义报错console.log(error) // ReferenceError: a is not defined
}
throw
,用来抛出一个用户自定义的异常,执行将被停止。
function getUserName(name) {if(!name) throw new Error('用户名无效');return name;
}
getUserName()
Promise
的异常处理,Promise
执行中,本身自带try...catch
的异常处理,出错时,将错误Rejact函数。
new Promise((resolve, reject) => {throw new Error('error!');
}).catch(alert);
console.log()
方法,在浏览器中,使用console.log打印JavaScript的值。
let value = '你最棒了,点个赞呗!'
console.log(value)
debugger
断点调试,用于停止执行 JavaScript,并调用调试函数。
let value = 15;
debugger
document.querySelector('body').innerhtml = '你最棒了,点个赞呗!'