javascript中的对象属性,方法.try ...catch
答案:5 悬赏:10 手机版
解决时间 2021-02-05 15:59
- 提问者网友:雾里闻花香
- 2021-02-04 15:44
javascript中的对象属性,方法.try ...catch
最佳答案
- 五星知识达人网友:零点过十分
- 2021-02-04 16:06
JS代码为了程序的健壮性而增加了错误处理机制,可以说他是仿C族语言的特征而设的,但事实我们们必须要先知道我们的try语句能够获取哪些类的错误,并不是所有的错误都能由try去捕获的。try捕获的只有运行时错误,也就是说runtime类型的错误才能被捕获出来的。
而JS代码最入加浏览器时也是一个检查,这时代码并未工作,此时所出现的错误只是一些简单的语法错误的,而不是runtime错误。就以你的程序为例吧:
首先声明一点,你是VB系转向的C族的程序员吧?C族的每一个语句结束时都要求用;分行,表示这是一个语句。这是与VB、VF等不同的地方。下次写注意一下。
你本来的意思是,让try去捕获一个不存在的事件adddlert()这个语句的错误,可问题在于,还没有进行运行时,而是在页面加载的时候,语法就已经检查到了该函数没有对象的错误,这时还没有进行运行态(runtime),所以程序已经不会再进行运行了。这时你看到的结果并没有按照你所想的。
所以你要牢记的就是try结构只会捕获运行态的错误,而语法检查出现的最早,所以语法的错误try还是没有机会去捕获的。运行态的错误往往是比如除0错误等等。你可以这样更改去让你的程序运行下去的。
将adddlert("Welcome guest!");更改为这样的语句:
eval('adddlert("Welcome guest!");');
这样虽是语法检查了,但不会出现语法错误,而真正去执行时却找不到对象属于运行时的错误了,应该可以顺利的进入到错误处理结构中,从而执行catch块内的代码。但前提是保证好你的catch内不要出错,另外,try结果出错时是将错误抛给了E,所以要catch的小括号中去接收的是catch(e)才行,这时又涉及一个错误的类型,而不像VB中的on Error Resume Next处理机制,将所有的错误都抛给了Err,所以还要估计出错的类型,而用合适的变量去接收才行的。
我估计,你的Err在这里什么也接不到的!所以在JS中可以出现这种用法的:
try{
}catch(e1){
}catch(e2){
}也就是一个try会出现几个catch和一个或有或无的finily,同时还可以接收自定义错误的,这时可以使用throw语句抛出例外。
但在一点是JS中还存在一个自动转型的,所以可以不说明错误类型。一般的错误用一个变量都可以接收,但特殊的类型还是要特殊接收。
至于,我想你应该更正你的catch中的错误,按照EMCA-262核心的代码来写就可以了!在JS中只有最后一个语句才可以省略掉分行号的!
而JS代码最入加浏览器时也是一个检查,这时代码并未工作,此时所出现的错误只是一些简单的语法错误的,而不是runtime错误。就以你的程序为例吧:
首先声明一点,你是VB系转向的C族的程序员吧?C族的每一个语句结束时都要求用;分行,表示这是一个语句。这是与VB、VF等不同的地方。下次写注意一下。
你本来的意思是,让try去捕获一个不存在的事件adddlert()这个语句的错误,可问题在于,还没有进行运行时,而是在页面加载的时候,语法就已经检查到了该函数没有对象的错误,这时还没有进行运行态(runtime),所以程序已经不会再进行运行了。这时你看到的结果并没有按照你所想的。
所以你要牢记的就是try结构只会捕获运行态的错误,而语法检查出现的最早,所以语法的错误try还是没有机会去捕获的。运行态的错误往往是比如除0错误等等。你可以这样更改去让你的程序运行下去的。
将adddlert("Welcome guest!");更改为这样的语句:
eval('adddlert("Welcome guest!");');
这样虽是语法检查了,但不会出现语法错误,而真正去执行时却找不到对象属于运行时的错误了,应该可以顺利的进入到错误处理结构中,从而执行catch块内的代码。但前提是保证好你的catch内不要出错,另外,try结果出错时是将错误抛给了E,所以要catch的小括号中去接收的是catch(e)才行,这时又涉及一个错误的类型,而不像VB中的on Error Resume Next处理机制,将所有的错误都抛给了Err,所以还要估计出错的类型,而用合适的变量去接收才行的。
我估计,你的Err在这里什么也接不到的!所以在JS中可以出现这种用法的:
try{
}catch(e1){
}catch(e2){
}也就是一个try会出现几个catch和一个或有或无的finily,同时还可以接收自定义错误的,这时可以使用throw语句抛出例外。
但在一点是JS中还存在一个自动转型的,所以可以不说明错误类型。一般的错误用一个变量都可以接收,但特殊的类型还是要特殊接收。
至于,我想你应该更正你的catch中的错误,按照EMCA-262核心的代码来写就可以了!在JS中只有最后一个语句才可以省略掉分行号的!
全部回答
- 1楼网友:从此江山别
- 2021-02-04 19:06
后面用alert()方法,前面干嘛用错的,adddlert("Welcome guest!")改成alert("Welcome guest!")就没问题!
- 2楼网友:鸽屿
- 2021-02-04 17:42
对javascript研究不深 这个例子中方法错误应该是adddlert("Welcome guest!")这个方法不存在所以报了个异常
- 3楼网友:冷風如刀
- 2021-02-04 17:25
因为你没定义有adddlert()这函数,所以提示缺少(函数)对象。
- 4楼网友:孤独的牧羊人
- 2021-02-04 16:55
没有adddlert这个方法
还有你有一个很不好的习惯,就是从来不写分号
还有声明变量要用var关键字
没听说过方法错误啊
try catch只要不是语法错误都捕捉的
三楼:没有runtime这个类型的吧
用eval是会抛出EvalError错误的
记得javascript 1.8里有错误类型重载
finally打错了
还有你有一个很不好的习惯,就是从来不写分号
还有声明变量要用var关键字
没听说过方法错误啊
try catch只要不是语法错误都捕捉的
三楼:没有runtime这个类型的吧
用eval是会抛出EvalError错误的
记得javascript 1.8里有错误类型重载
finally打错了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯