js基础速成14-错误处理
错误处理
JavaScript 是一种弱类型语言。有时,当您尝试访问未定义的变量或调用未定义的函数等时,会出现运行时错误。
JavaScript 类似于 Python 或 Java,提供了一种错误处理机制,使用 try-catch-finally 块来捕捉运行时错误。
try {
// 可能抛出错误的代码
} catch (err) {
// 如果发生错误,将执行的代码
} finally {
// 无论是否发生错误,都将执行的代码
}
try:将可能抛出错误的可疑代码包装在 try 块中。try 语句允许我们定义一段在执行时需要测试错误的代码块。
catch:在 catch 块中编写代码,当发生错误时执行。catch 块可以有参数,这些参数将提供错误信息。catch 块用于记录错误或向用户显示特定消息。
finally:finally 块将始终执行,无论是否发生错误。finally 块可用于完成剩余任务或重置在 try 块中可能已更改的变量。
示例:
try {
let lastName = 'Yetayeh'
let fullName = fistName + ' ' + lastName
} catch (err) {
console.log(err)
}
ReferenceError: fistName is not defined
at <anonymous>:4:20
try {
let lastName = 'Yetayeh'
let fullName = fistName + ' ' + lastName
} catch (err) {
console.error(err) // 我们可以使用 console.log() 或 console.error()
} finally {
console.log('无论如何我都会被执行')
}
ReferenceError: fistName is not defined
at <anonymous>:4:20
无论如何我都会被执行
catch 块接受一个参数。通常会传递 e、err 或 error 作为 catch 块的参数。这个参数是一个对象,具有 name 和 message 键。让我们使用 name 和 message。
try {
let lastName = 'Yetayeh'
let fullName = fistName + ' ' + lastName
} catch (err) {
console.log('错误名称', err.name)
console.log('错误信息', err.message)
} finally {
console.log('无论如何我都会被执行')
}
错误名称 ReferenceError
错误信息 fistName is not defined
无论如何我都会被执行
throw:throw 语句允许我们创建自定义错误。我们可以抛出字符串、数字、布尔值或对象。使用 throw 语句抛出异常。当您抛出异常时,表达式指定异常的值。以下每个都会抛出一个异常:
throw 'Error2' // 生成一个字符串值的异常
throw 42 // 生成一个值为 42 的异常
throw true // 生成一个值为 true 的异常
throw new Error('Required') // 生成一个消息为 "Required" 的错误对象
const throwErrorExampleFun = () => {
let message
let x = prompt('请输入一个数字: ')
try {
if (x == '') throw 'empty'
if (isNaN(x)) throw 'not a number'
x = Number(x)
if (x < 5) throw 'too low'
if (x > 10) throw 'too high'
} catch (err) {
console.log(err)
}
}
throwErrorExampleFun()
错误类型
-
ReferenceError:发生非法引用时抛出。如果我们使用了未声明的变量,将抛出 ReferenceError。
let firstName = 'Asabeneh' let fullName = firstName + ' ' + lastName console.log(fullName)
Uncaught ReferenceError: lastName is not defined at <anonymous>:2:35
-
SyntaxError:发生语法错误时抛出。
let square = 2 x 2 console.log(square) console.log('Hello, world")
Uncaught SyntaxError: Unexpected identifier
-
TypeError:发生类型错误时抛出。
let num = 10 console.log(num.toLowerCase())
Uncaught TypeError: num.toLowerCase is not a function at <anonymous>:2:17