JS里try...catch...finally详解,以及console日志调试(console.log、console.info等)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>测试页面</title>
    <script type="text/javascript">
        /*
            Error具有下面一些主要属性
            description: 错误描述 (仅IE可用).
            fileName: 出错的文件名 (仅Mozilla可用).
            lineNumber: 出错的行数 (仅Mozilla可用).
            message: 错误信息 (在IE下同description)
            name: 错误类型.
            number: 错误代码 (仅IE可用).
            stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用).
        */
        try {
            clear();
            //throw new Error("Whoops!");
        }
        catch (e) {
            /*除了console.log(),Firebug还支持多种不同的日志级别:debug、info、warn、error*/
            console.log(e.name)
            console.log(e.message)
            /*
				现总结Error.name的六种值对应的信息:
				1. EvalError:eval()的使用与定义不一致
				2. RangeError:数值越界
				3. ReferenceError:非法或不能识别的引用数值
				4. SyntaxError:发生语法解析错误
				5. TypeError:操作数类型错误
				6. URIError:URI处理函数使用不当
            */
            if (e instanceof EvalError) {  //Eval错误
                alert(e.name + ":" + e.message);
            }
            else if (e instanceof ReferenceError) {  //引用错误
                alert(e.name + ": " + e.message);
            }
        }
        finally {
            console.info("无论 try / catch 的结果如何都会执行");
        }

        try {
            throw new Date(); // 抛出当前时间对象
        }
        catch (e) {
            console.info(e.name);
            console.info(e.toLocaleString()); // 使用本地格式显示当前时间
        }

    </script>
</head>
<body>

</body>
</html>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>其它一些例子</title>
    <script type="text/javascript">
        try {
            console.info([1, 2, 3].toString()); //显示   1,2,3

            var a = 2..toString();  //(2).toString()  两种方式都是正确的
            console.info(a);

            var foo = { name: 'kitten' }
            console.log(foo.name); // kitten
            console.log(foo['name']); // kitten

            /*
                从对象中移除属性的唯一方法是使用“删除运算符”;
                将属性设置为未定义或NULL只移除与属性相关的值,但不移除键。
            */
            var obj = {
                bar: 1,
                foo: 2,
                baz: 3
            };
            obj.bar = undefined;
            obj.foo = null;
            delete obj.baz;

            for (var i in obj) {
                if (obj.hasOwnProperty(i)) {
                    console.log(i, '' + obj[i]);
                }
            }

            //打印0-9
            for (var i = 0; i < 10; i++) {
                setTimeout(function (e) {
                    console.log(e);
                }, 1000, i);
            }
            /*  undefined
                下面是一些返回值未定义(undefined)的例子:
                访问未修改的全局变量未定义。
                访问已声明但尚未初始化的变量。
                由于缺少返回语句的函数的隐式返回。
                不显式返回任何语句的返回语句.。
                不存在的属性查找。
                没有任何显式值传递的函数参数.。
                已设置为未定义值的任何。
                无效表达式(表达式)
            */

            //delte删除
            var obj = { x: 1 };
            obj.y = 2;
            delete obj.x; // true
            delete obj.y; // true
            console.log(obj.x); // undefined
            console.log(obj.y); // undefined
        } catch (e) {
            console.error(e.name);
            console.error(e.message);
        }
    </script>
</head>
<body>

</body>
</html>


原文地址:https://www.cnblogs.com/smartsmile/p/6234027.html