15.2.3 使用console.log()记录脚本过程
一旦脚本开始运行,它就像是一种黑盒子。我们并不能真正知道脚本中发生了什么,并且只能看到最终结果,例如,页面上的消息、一个弹出窗口等。我们不能总是确切地判断一个循环是否正确工作,或者在任何时候都及时地看到一个特定变量的值。
JavaScript程序员很长一段时间以来使用alert()方法(参见1.3节)来弹出带有一个变量的当前值的一个窗口。例如,如果想要知道当一个循环运行的时候变量elementName中存储的是什么值,使用alert(elementName);。这是查看脚本的“黑盒子”中的内容的一种方式。然而,警告框确实太有干扰性了。我们必须单击它以关闭,并且在一个可能要运行20次的循环中,就会有太多的弹出警告框要关闭。Firebug提供了查看程序的一种更好的方法。Firebug控制台不仅列出错误(参见上一节的介绍),而且可以用来输出来自程序的消息。console.log()的作用类似于document.write()函数(参见1.4节的介绍),但是,console.log()把消息输出到控制台,而不是把消息输出到Web页面。
提示:当前所有的浏览器都支持console.log()方法。因此,你可以参考第1章介绍的内容在Chrome、Safari、Internet Explorer和Opera的控制台中使用它。
例如,可以使用如下代码把变量elementName的当前值显示到控制台:
console.log(elementName);
和alert()方法不同,这种方法不会干扰程序流程,我们只是在控制台中看到这条消息。
要让日志消息更容易理解,可以包含带有附加文本的一个字符串。例如,如果有一个名为name的变量,并且我们想要确定在程序中的某个时刻该变量中存储的是什么值,可以像下面这样使用console.log()函数:
console.log(name);
但是,如果想要在name的前面加一条消息,可以这样编写:
console.log('User name:%s',name);
换句话说,首先给log()函数传递一个字符串,后面跟着一个逗号以及要显示其中的值的变量名。特殊的%s是表示“用变量的值替换我”的一种方式。换句话说,变量的值替换了%s,因此,最终在控制台中得到这样的一条消息:“User name:Bob”。
可以给消息添加多个变量,只要为每个变量包含一个%s就可以了。例如,如果有两个变量:name和score,并且想要用一条定制日志消息来显示它们,可以这样编写:
console.log('%s has a score of%s',name, score);
可以对数字值使用%s,但是Firebug提供了两种其他的符号:%d和%f,分别表示整数(例如,1、2和10)和浮点数(例如,1.22和2.4444)。使用这两个数值符号中的一个,意味着数值将用不同的颜色显示,这只是将它们和其他文本区分开的一种方式。
例如,可以重新编写上面的代码,从而把存储在变量score中的数值也显示出来:
console.log('%s has a score of%d',name, score);
log()函数只是一种方法,可以为我们提供一些自己所开发的脚本的功能的相关信息。一旦程序完成并且投入使用,我们应该从脚本中删除所有的console.log()代码。没有安装Firebug的Web浏览器(也包括Internet Explorer、Safari和Opera),在遇到log()函数的时候将会产生错误。