javascript中的对象属性,方法.try ...catch

来源:百度知道 编辑:UC知道 时间:2024/06/25 21:13:21
以下代码:<html>
<head>
<script type="text/javascript">
var txt=""
function message()
{
try
{
adddlert("Welcome guest!")
}
catch(err)
{
txt="此页面存在一个错误。\n\n"
txt+="错误描述: " + err.description + "\n\n"
txt+="点击OK继续。\n\n"
alert(txt)
}
}
</script>
</head>

<body>
<input type="button" value="View message"

onclick="message()" />
</body>

</html>

运行后,结果在"错误描述"中显示:没有对象,什么意思?alert不是方法吗?try...catch捕捉到的怎么会是方法错误呢?这个例子中哪个是对象?哪个是属性,哪个是方法?请高手帮忙全都回答一下,谢谢子..我好想知道答案....!!!!!!!!!!!!请讲得简单,具体一点好吗???????????求你了.>.

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)