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
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code王工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值