JS异常捕获和抛出

try...catch 用来异常捕获(主要适用于IE5以上内核的浏览器,也是最常用的异常捕获方式)

使用onerror时间捕获异常,这种捕获方式是比较古老的一中方式,目前一些主流的浏览器暂不支持这种

捕获方式。

捕获异常的语法如下:

try {

//运行代码

} catch(err) {

//处理错误

}

测试示例代码如下,abc是一个未定义的函数,会抛出异常,异常信息会被try catch,进入catch语句中执行

var msg = "";
try{
  abc();
}catch(err){
  console.log(err)
  console.log(err.message);
}

如果把try  catch 去掉的话 ,会出现什么情况呢?

控制台报错了 ,而且后续中断没有执行,因为添加的日志打印信息没有执行,。针对

这种没有捕获的异常,会异常中断程序,页面上没有合理的提示信息,用户会莫名其妙

体验非常不好。

以上是针对try catch的使用方法的描述,还有一种情况就是,需要自定义一个异常然后抛出,

比如某个条件不符合或是值为空的情况,需要抛出异常,提示用户,暂停后续程序的执行,

这种情况就需要throw一个exception

var num = "a";
try {
  if(num==" ")    throw   "值为空";  //刚才这个地方的分号写成中文状态下的分号,结果出出错了
  if(isNaN(num))  throw    "不是数字";
}
catch(err){
  alert("错误信息:"+err);
}

刷新浏览器,看看throw出来的异常提示信息,就是我们定义的错误信息“不是数字”,

因为num的值为a,判断为空的语句通过,判断是否数字的语句抛出异常

通过上面的例子可以发现,异常场景都在我们的控制范围之内,

不会出现什么未知和突然中断程序的异常

通过上面有异常捕获和没有异常捕获的情况对比来看,

没有捕获处理异常的情况,非常不友好,程序也缺少健壮性

原文地址:https://www.cnblogs.com/agansj/p/9194156.html

时间: 2024-10-08 16:14:14

JS异常捕获和抛出的相关文章

异常处理——捕获并抛出

异常处理--捕获并抛出 代码如下; package Day09; public class TestChanedException { public static void main(String args[]) { try { method1(); // 捕获method1中的异常 } catch (Exception ex) { ex.printStackTrace(); // 打印输出异常,首先显示method1 // 中抛出的异常,然后显示method2中抛出的异常. } } publi

Atitti 跨语言异常的转换抛出 java js

异常的转换,直接反序列化为json对象e对象即可.. Js.没有完整的e机制,可以参考java的实现一个stack层次机制的e对象即可.. 抛出RuntimeException vs 还是e.cause; 应该抛出完整e,因为runtimeE可能还有一些说明.. 那如何捕获异常,可以判断,如果是RuntimeException,那么捕获他的cause就可.. function convert2jsEx(data) { if(typeof data=="string") { try{ d

java中异常处理机制 throw抛出自定义业务逻辑异常 throws继续抛出 catch捕获后会自动继续抛向调用方法

package com.swift; public class Exception_TestC { public static void main(String[] args) { /* * 第5题: 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个 * 方法a,请在这个方法中调用b,然后抛出异常.在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕 捉异常的信息.Java异常的处理机制 * * 如果try或cat

js 异常捕获

<!-- <script> var nnnn=10;//全局变量 function demo(a,b){ var a=10;//局部变量 var sum=a+b; x=10; return sum; } var v1=demo(20,10); alert(v1); </script> <form> <input id="txt" type="text"> <input id="btn"

java如何解决异常是应该抛出还是应该处理的问题

情况如上图,问g()应该抛出f()的异常还是处理掉f()的异常? 一.如果h()无需知道g()是否成功或者是否出错,或者h()对g()出错与否不能控制和解决,那么g()就无需向h()报告异常 二.如果h()在运行中需要知道g()是否成功以及可以对g()出错进行处理,那么g()不能自己处理掉异常,应该往上抛出. 三.g()可以将f()的异常如下处理:      private void g(){ try { f(); } catch (Exception e) { throw new Runtim

异常的数字抛出,为什么会出现错误?(未解决)

#include <iostream> using namespace std; class A { public: A(int a, int b) { this->a = a; this->b = b; cout << "我是快乐的构造函数.\n"; } ~A() { cout << "我是无能的析构函数\n"; } protected: private: int a; int b; }; void divide()

Js异常捕获

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script> function demo(){ try{ alert(str); }catch(e){ alert(e); } } demo(); </script> <form> &l

异常抛出与捕获的思考

异常处理的思考 在java中异常分为两类.一.检查性异常.二.非检查性异常(运行时异常) 二者的区别:检查性异常需要显式try-catch或者throw.运行时异常可以不用捕获. 对于检查性异常由于必须捕获,所有并不需要太多的讨论(在设计异常的时候需要考虑).主要讨论运行时异常的抛出与捕获. 运行时异常的正确捕获和抛出,能够让系统代码更加简洁与rd只需要关系正常业务,对于不正常业务则交由异常处理. 现在存在的困扰: 1.每调用一个其他方法,都需要考虑与分析这个方法是不是存在异常,影响正常业务流程

捕获Java线程池执行任务抛出的异常

Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { public abstract void run();} 那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了? 通常java.lang.Thread对象运行设置一个默认的异常处理方法: java.lang.Thread.setDefaultUncaughtExceptionHandler(UncaughtExce