美文网首页JavaScript 基础与提高
JavaScript 坑与技巧:异常

JavaScript 坑与技巧:异常

作者: soojade | 来源:发表于2017-02-06 16:50 被阅读28次

异常

异步错误处理

// 坑
function printTime() {
    throw new Error();
}

try {
    setTimeout(printTime, 1000);
    console.log('done');
} catch (e) {
    alert('error');
}

try包裹setTimeout()是无效的:原因就在于调用setTimeout()函数时,传入的printTime函数并未立刻执行!紧接着,JavaScript 引擎会继续执行console.log('done');语句,而此时并没有错误发生。直到1秒钟后,执行printTime函数时才发生错误,但此时除了在printTime函数内部捕获错误外,外层代码并无法捕获。

所以,涉及到异步代码,无法在调用时捕获,原因就是在捕获的当时,回调函数并未执行。

表单中的错误处理

类似的,当我们处理一个事件时,在绑定事件的代码处,无法捕获事件处理函数的错误。

例如,针对以下的表单:

// 坑
<form>
    <input id="x"> + <input id="y">
    <button id="calc" type="button">计算</button>
</form>

<script>
    var $btn = $('#calc');
    // 取消已绑定的事件:
    $btn.off('click');
    try {
        $btn.click(function () {
            var
                x = parseFloat($('#x').val()),
                y = parseFloat($('#y').val()),
                r;
            if (isNaN(x) || isNaN(y)) {
                throw new Error('输入有误');
            }
            r = x + y;
            alert('计算结果:' + r);
        });
    } catch (e) {
     alert('输入有误!');
    }
</script>

用户输入错误时,处理函数并未捕获到错误。修复后:

$btn.click(function () {
    var
        x = parseFloat($('#x').val()),
        y = parseFloat($('#y').val()),
        r;
    try {
        if (isNaN(x) || isNaN(y)) {
            throw new Error('输入有误');
        }
        r = x + y;
        alert('计算结果:' + r);
    } catch (e) {
        alert('输入有误!');
    }
});

相关文章

  • JavaScript 坑与技巧:异常

    异常 异步错误处理 用try包裹setTimeout()是无效的:原因就在于调用setTimeout()函数时,传...

  • JavaScript 坑与技巧:this

    this 在方法内部的函数中使用this 由于this指针只在age方法的函数内指向xiaoming,在函数内部定...

  • JavaScript 坑与技巧:遍历

    假如要按如下方法遍历一个数组: 这样每次循环还要和len比较,时间复杂度是O(n+1)。可以使用如下方式: 上面的...

  • JavaScript 坑与技巧:reduce()

    判断字符串str="adfkjglsdkjfjsa"中每个字符出现的次数: 将数组a=[1,2,3,4,5]转换成...

  • JavaScript 坑与技巧:表单

    表单 巧用 input 加密提交 很多登录表单出于安全考虑,提交时不传输明文密码,而是密码的MD5。普通JavaS...

  • JavaScript 坑与技巧:map

    map() 在 map 中使用 parseInt 的坑 由于map()接收的回调函数可以有3个参数:callbac...

  • JavaScript 坑与技巧:sort

    sort() 直接使用sort对数组排序 Array的sort()方法默认把所有元素先转换为 String 再排序...

  • JavaScript 坑与技巧:DOM

    DOM 当遍历一个父节点的子节点并进行删除操作时,要注意,children属性是一个只读属性,并且它在子节点变化时...

  • JavaScript 坑与技巧:filter

    filter() 巧用 filter 去除数组中相同元素 filter()接收的回调函数可以有多个参数。通常我们仅...

  • JavaScript 坑与技巧:闭包

    闭包 由于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了4,因此最终...

网友评论

    本文标题:JavaScript 坑与技巧:异常

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