全回顾扫盲js之错误处理二------处理策略

常见的错误类型

  • 类型转换错误
  • 数据类型错误
  • 通信错误

类型转换错误

由于js变量是松散型,所以变量类型只有在运行的时候才会被js识别出来,没有前期的报错机制,所以经常会出现类型转换错误和数据类型错误

js有默认的类型转换机制,比如 5 == '5' ,在 == 的情况下,是成立的。因为相等操作符会将数字5转换成字符串'5',所以应该尽量使用全等和非全等。我们看jsqery源码中大部分用的都是全等 ,在用eslint时,如果不用全等或者不全等,也会报出语法错误。

getQueryString({})
function getQueryString(url) {
    var pos = url.indexOf('?')
    if(pos> -1) {
        console.log(1)
    } else {
        console.log(2)
    }
}

这个函数的目的是判断url中是否存在'?',但是这个函数遇到传参不对要抛错了,因为{}不存在indexOf属性。所以应该进行类型的验证,代码如下

getQueryString({})
function getQueryString(url) {
    if (typeof url == 'string') {
        var pos = url.indexOf('?')
        if(pos> -1) {
            console.log(1)
        } else {
            console.log(2)
        }
    }
}

数据类型错误

同样的,如果我们向对一个数组进行排序操作,代码如下

toSort({})
function toSort(value) {
    if(value != null) {
        value.sort()
    }
}

这里同样会抛错,因为只有数组才有sort属性,所以这里我们仍然要进一步判断传入的值是不是在Array的原型链上混的

toSort({})
function toSort(value) {
    if(value instanceof Array) {
        value.sort()
    }
}

通信错误

通信错误主要是要注意对url格式的编码

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

总而言之,主要方针有两个。第一,如果是基本类型,就应该用typeof来检测,如果是对象的值,就应该用instanceof来监测。不能单纯的用if(aaa)这种方式。第二,对url进行转码。

随机浏览