美文网首页Web开发技术
JS学习16(错误处理与调试)

JS学习16(错误处理与调试)

作者: exialym | 来源:发表于2016-05-21 22:34 被阅读18次

    错误处理

    try-catch

    try{
        //可能出错的代码
        asdfjsald
    } catch(error){
        alert("errrrror");
        alert(error.message);
    }
    

    finally子句
    finally子句一旦使用,其代码无论如何都会执行。
    真的是无论如何都会执行,就算之前的try-catch中有return语句。

    function testFinally(){
        try {
            return 2;
        } catch (error){
            return 1;
        } finally {
            return 0; 
        }
    }
    

    只要有finally,try和catch中的return都会被忽略
    finally有的话,catch语句可以没有。
    错误类型
    Error
    EvalError
    RangeError
    ReferenceError
    SyntaxError
    TypeError
    URIError

    抛出错误

    与try-catch相配的还有一个throw操作符。抛出错误时要指出一个值用于抛出自定义错误,这个值是什么类型都可以。

    throw 12345;
    throw "Hello world!";
    throw true;
    throw { name: "JavaScript"};
    

    在遇到throw时,代码会立刻停止执行,仅当有try-catch捕获时代码才会继续运行。

    throw new Error("Something bad happened.");
    

    抛出错误的时机
    浏览器对错误的解释可能很模糊,对于大型的应用,抛出你自己的错误对查找问题的根源很有帮助。

    function process(values){
        if (!(values instanceof Array)){
            throw new Error("process(): Argument must be an array.");
        }
        values.sort();
    }
    

    常见错误类型

    类型转换错误
    这里第三个参数是可选的,但是像第一个例子这样检测并不合适

    function concat(str1, str2, str3){
        var result = str1 + str2; 
        if (str3){ //   不要这样  !!!
            result += str3;
        }
        return result;
    }
    function concat(str1, str2, str3){ 
        var result = str1 + str2;
        if (typeof str3 == "string"){
            result += str3;
        }
        return result;
    }
    

    数据类型错误

    function reverseSort(values){
        //if (values != null)
        //if (typeof values.sort == "function")
        //if (values){
        //上面的检测都不靠谱
        if (values instanceof Array){
            values.sort();
            values.reverse();
        }
    }
    

    通信错误
    URL构建错误
    使用一个函数来添加参数

    function addQueryStringArg(url, name, value){
        if (url.indexOf("?") == -1){
            url += "?";
        } else {
            url += "&";
        }
        url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
        return url;
    }
    

    把错误记录到服务器

    使用Image对象巧妙的将错误记录

    function logError(sev, msg){
        var img = new Image();
        img.src = "log.php?sev=" + encodeURIComponent(sev) + "&msg=" +
            encodeURIComponent(msg);
    }
    

    相关文章

      网友评论

        本文标题:JS学习16(错误处理与调试)

        本文链接:https://www.haomeiwen.com/subject/cjjorttx.html