在javascript编程中灵活使用try-catch

上周,在分享家的qq交流群里,经常有人向我反馈不能下载东西。于是直接联系了一个用户,发现他的浏览器报出pageTracker对象不存在错误。

问题很显然了,由于我在下载链接的onmousedown事件中添加了Event统计,如果用户的Google Analytics代码没有加载成功(显然是万恶的教育网造成的),那么就会报出这样错误。

请看原来的代码片段:

function analytics(category, action, label, value){
 
    pageTracker._trackEvent(category, action, label, value);
 
}

修改一下,加上try-catch屏蔽这个错误:

function analytics(category, action, label, value){
 
    try{
 
        pageTracker._trackEvent(category, action, label, value);
 
    }catch(e){}
 
}

用try-catch来屏蔽浏览器错误是一个Javascript编程中很常用的一个技巧,灵活使用可以给开发者减少很多麻烦,下面再举一例。

最近,我在开发一个通用的所见即所得编辑器。某些时候,程序需要记录住当前状态的节点,给后续程序处理。但麻烦来了,用户如果持续的在进行编辑动作,在程序后续处理时,节点可能已经不在DOM树中了。

在IE下,如果你调用一个不存在的文本节点(nodeType == 3)的任何属性或者方法,浏览器直接报错。根本找不到能判断这个节点是否存于DOM树中的方法。于是有了如下代码:

try{
 
    if(ele.ownerDocument != editor.document)
        return false;
}catch(e){
    return false;
}

上面的代码很好懂,首先判断这个节点是不是在编辑器中,如果不是,返回false;如果在过程中出现了错误,也返回false。

关于try-catch的故事就说到这里,最后要提醒大家,try-cacth会影响javascript的性能,因此不应该在追求性能的环境中使用,尤其是一些基础方法或者会被多次调用的方法中。
下一篇文章,我将使用一个更好的办法来解决文首提到的Google Analytics报错的问题。欢迎你订阅我的博客,在第一时间获得更新。

Tags: 相关Tags:

» «

相关文章

  • No Related Posts

发表评论

只有思想的碰撞才能产生火花!请留下你宝贵的评论吧: