javascript错误处理和调试(javascript错误处理完全指南)

JavaScript引擎在执行JavaScript代码时,会出现各种错误:可能是语法错误,通常是程序员造成的编码错误或错别字;可能是语言中的拼写错误或功能缺失(可能是浏览器差异);可能是服务器或用户错误输出导致的错误;也可能是因为很多其他不可预知的因素。那么有什么好的js可以检测错误吗?
JS本身就是一种动态语言,所以人们普遍认为它是最难调试的编程语言。当脚本出错时,会因为没有上下文信息而造成混乱。ECMAScript版致力于解决这一问题,引入了try-catch、throw等一些语句,以及一些错误类型,让开发者能够正确处理错误,提高开发效率。
1.JavaScript解析或运行错误实例对象时,一旦出现错误,引擎将抛出错误对象。JavaScript原生提供了一个错误构造函数,所有抛出的错误都是这个构造函数的实例。
var=new Error(‘ Error ‘);Err.message //’ Error ‘抛出错误实例对象,整个程序在错误发生的地方中断,不再进一步执行。
错误有以下主要属性:
描述:错误描述(仅在IE中可用)。fileName:错误文件名(仅在Mozilla中可用)。lineNumber:错误行号(仅在Mozilla中可用)。message:错误信息(与IE中的描述相同)名称:错误类型。编号:错误代码(仅适用于IE)。stack:错误堆栈信息,如Java中的堆栈跟踪(仅Mozilla可用)。
2.本机错误类型错误实例对象是最常见的错误类型。在其基础上,JavaScript还定义了其他六个错误对象。也就是说,有六个派生的错误对象。
2.1 SyntaxError对象SyntaxError对象是解析代码时出现的语法错误。
//变量名的错误信息是“令牌非法”var 1a//未捕获语法错误:无效或意外的标记//缺少括号错误提示为“字符串不符合要求”console . log ‘ hello ‘);//未捕获语法错误:意外字符串2.2 ReferenceError对象ReferenceError对象在引用不存在的变量时出错。
//使用一个不存在的变量未知变量//un true reference错误:未知变量未定义。另一个触发场景是给一个不能赋值的对象赋值。
//等号左边不是变量console . log()=1//un autherror :赋值中的左边无效//不能给该对象赋值this=1//Error :赋值中的左边无效2.3 RangeError对象RangeError对象在值超出有效范围时为错误。主要有几种情况,一是数组长度为负,二是Number对象的方法参数越界,函数栈超过最大值。
//数组长度不能为负new array(-1)//uncaughtlangeerror 3360无效数组长度2.4 TypeError对象TypeError对象是当变量或参数不是预期类型时发生的错误。例如,如果您对原始类型的值(如字符串、布尔值和数值)使用new命令,将会引发此错误,因为new命令的参数应该是构造函数。
new 123//un catch type error : number不是func var obj={ };Obj。未知方法()//UncaughtTypeError 3360Obj。未知方法不是函数2.5 URIError对象URIError对象是URI相关函数的参数不正确时抛出的错误,它主要涉及六个函数:encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()。
2.6当EvalError对象的eval函数执行不正确时,会抛出evalerror错误。这种错误类型已不再使用,但保留它只是为了确保与以前的代码兼容。
2.7总结以上6个派生的错误,加上原来的错误对象,都是构造函数。这些构造函数都接受一个参数,该参数表示一条错误消息。
Var 1=newerror (‘Error!’);Var err2=new RangeError(‘错误,变量超出了有效范围!’);Var3=newtypeerror(‘错误,无效的变量类型!’);1.呃。消息//’错误!’2.ERR message//’错误,变量超出了有效范围!’3.呃。Message//’错误,无效的变量类型!’3.throw语句throw语句的作用是主动中断程序执行,抛出一个错误。
Var=-1if (x=0) {throw new error (‘x必须是正数’);}//未捕获的错误: x必须是正数。在上面的代码中,如果变量x小于等于0,手动抛出一个错误告诉用户x的值不正确,整个程序会在这里中断执行。可以看到,throw抛出的错误是它的参数。下面是一个错误实例。
Throw可以抛出任何类型的值。也就是说,它的参数可以是任何值。
//抛出一个字符串抛出“错误!”;//未捕获的错误!//抛出一个数值throw 42//未捕获42对于JavaScript引擎,程序遇到throw语句就中止。引擎将接收throw抛出的信息,可能是错误实例或其他类型的值。
4.尝试.一旦catch结构出现错误,程序将停止执行。JavaScript提供了一种尝试.catch结构,它允许您处理错误并选择是否向下执行它们。
如果您不确定某些代码是否会报告错误,您可以将它们放在try中.catch代码块,便于进一步的错误处理。
请尝试{ throw ‘ error} catch(e){ console . log(111);} console . log(222);//111//222在上面的代码中,try代码块抛出的错误被catch代码块捕获后,程序不会被中断,会按照正常的流程继续执行。
5.最后代码块尝试.catch结构允许在末尾添加一个finally代码块,指示无论是否有错误都必须在末尾运行的语句。
函数CleanSUP () {try {throw new error(‘有事出错…’);Console.log(‘将不执行此行’);} finally {console.log(‘完成清理’);}}cleansUp()//完成清理工作//未计数错误3360错误.//在CleanSUP(3360:11)//在上述代码中的336010:1处,由于没有catch语句块,一旦出现错误,代码就会被中断。在中断之前,将执行finally代码块,然后用一条错误消息提示用户。
以下示例显示return语句在finally代码之前执行,并且仅在finally代码执行之后返回。
var count=0;函数count up(){ try { return count;}最后{ count} } count up()//0 count//1//return语句中count的值是在finally代码块运行之前获取的。下面的例子充分反映了try的执行顺序.捕捉.最后。
函数f(){ try { console . log(0);扔‘bug’;} catch(e){ console . log(1);返回true//这句话会将console.log(2)的执行延迟到finally代码块的末尾;//不会运行} finally { console . log(3);返回false//这句话会覆盖上一句话,返回console . log(4);//不会运行} console . log(5);//不会运行} var result=f();//0//1//3result//false在上面的代码中,finally代码块会在catch代码块完成之前执行。
finally代码块使用的典型场景:
openFile();尝试{ writeFile(Data);} catch(e){ handle error(e);} finally { close file();}上面的代码先打开一个文件,然后将文件写入try代码块。如果没有错误,它运行finally代码块来关闭文件;一旦出现错误,就使用catch代码块来处理错误,最后关闭文件。

好玩下载

马里奥跑酷,马里奥跑酷中文版

2023-9-30 8:48:19

综合资源

火影482(火影忍者忍界大战是多少集)

2023-12-23 2:58:19

购物车
优惠劵
搜索