JS调试

这两天学了阮一峰的Firebug控制台详解,记录下。

显示信息的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>

<head>
<title>常用console命令</title>
<meta charset="utf-8" ; http-equiv="Content-type" content="text/html" />
</head>

<body>
<script type="text/javascript">
console.log('hello');
console.info('信息');
console.error('错误');
console.warn('警告');
</script>
</body>

</html>

占位符

console上述的集中度支持printf的占位符格式,支持的占位符有:字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)

1
console.log("%d年%d月%d日",2011,3,26);

信息分组

如果信息太多,可以分组显示,用到的方法是console.group()和console.groupEnd()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>

<head>
<title>信息分组</title>
<meta charset="utf-8" ; http-equiv="Content-Type" content="text/html" />
</head>

<body>
<script type="text/javascript">
console.group("group 1");
console.log("1.1");
console.log("1.2");
console.groupEnd();

console.group("group 2");
console.log("2.1");
console.log("2.2");
console.groupEnd();
</script>
</body>

</html>

查看对象的信息

console.dir()可以显示一个对象所有的属性和方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>

<head>
<title>console_dir</title>
<meta charset="utf-8" ; http-equiv="Content-Type" content="text/html" />
</head>

<body>
<script type="text/javascript">
var info = {
blog: "http://dwk715.github.io",
QQ: 1030528946,
message: "D.va love you"
};
console.dir(info);
</script>
</body>

</html>

显示某个节点的内容

console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>

<head>
<title>console_dirxml</title>
<meta charset="utf-8" ; http-equiv="Content-Type" content="text/html" />
</head>

<body>
<div id="info">
<h3>blog: dwk715.github.io</h3>
<p>D.va love you</p>
</div>
<script type="text/javascript">
var info = document.getElementById('info');
console.dirxml(info);
</script>
</body>

</html>

判断变量是否是真

console.assert()用来判断一个表达式或变量是否为真。如果结果为否,则在控制台输出一条相应信息,并且抛出一个异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>

<head>
<title>console_assert</title>
<meta charset="utf-8" ; http-equiv="Content-Type" content="http/text">
</head>

<body>
<script type="text/javascript">
var result = 0;
console.assert(result);
var year = 2016;
console.assert(year == 2018);
</script>
</body>

</html>

追踪函数的调用轨迹

console.trace()用来追踪函数的调用轨迹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>

<head>
<title>console_trace</title>
<meta charset="utf-8" ; http-equiv="Content-Type" content="http/text" />
</head>

<body>
<script type="text/javascript">
function add(a, b) {
console.trace();
return a + b;
}
var x = add3(1, 1)

function add3(a, b) {
return add2(a, b)
}

function add2(a, b) {
return add1(a, b)
}

function add1(a, b) {
return add(a, b)
}
</script>
</body>

</html>

计时功能

console.time()和console.timeEnd(),用来显示代码的运行时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>

<head>
<title>console_time</title>
<meta charset="utf-8">
</head>

<body>
<script type="text/javascript">
console.time("控制台计时器一");
for (var i = 0; i < 1000; i++) {
for (var j = 0; j < 1000; j++) {}
}
console.timeEnd("控制台计时器一");
</script>
</body>

</html>