深入分析javascript中的错误处理机制(5)


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;
}


【数据类型错误】

  javascript是松散类型的,在使用变量和函数参数之前,不会对它们进行比较以确保它们的数据类型正确。为了保证不会发生数据类型错误,只能编写适当的数据类型检测代码。在将预料之外的值传递绘函数的情况下,最容易发生数据类型错误

复制代码 代码如下:


//不安全的函数,任何非数组值都会导致错误
function reverseSort(values){
    if(values){
        values.sort();
        values.reverse();
    }
}


  另一个常见的错误就是将参数与null值进行比较。与null进行比较只能确保相应的值不是null和undefined。要确保传入的值有效,仅检测null值是不够的

复制代码 代码如下:


//不安全的函数,任何非数组值都会导致错误
function reverseSort(values){
    if(values != null){
        values.sort();
        values.reverse();
    }
}


  如果传入一个包含sort()方法的对象(而不是数组)会通过检测,但调用reverse()函数时可能会出错

复制代码 代码如下:


//不安全的函数,任何非数组值都会导致错误
function reverseSort(values){
    if(typeof values.sort == 'function'){
        values.sort();
        values.reverse();
    }
}


  在确切知道应该传入什么类型的情况下,最好是使用instanceof来检测其数据类型

复制代码 代码如下:


//安全,非数组值被忽略
function reverseSort(values){
    if(values instanceof Array){
        values.sort();
        values.reverse();
    }
}


【通信错误】

  随着Ajax编程的兴起,Web应用程序在其生命周期内动态加载信息或功能,已经成为一件司空见惯的事。不过,javascript与服务器之间的任何一次通信,都有可能会产生错误

  最常见的问题是在将数据发送给服务器之前,没有使用encodeURIComponent()对数据进行编码

复制代码 代码如下:


//错误

//针对'redir='后面的所有字符串调用encodeURIComponent()就可以解决这个问题

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzswzz.html