我們測試一下把剛才的4個輸出作為一個分組輸出,修改代碼為:
複製代碼 代碼如下:console.group('開始分組:');
console.debug('This is console.debug!');
console.info('This is console.info!');
console.warn('This is console.warn!');
console.error('This is console.error!');
console.groupEnd();
重新整理頁面看看結果(圖11-5)。在console.group中,我們還可以加入一個組標題“開始分組:”。如果需要,我們還可以通過嵌套的方式,在組內再分組。
圖11-5
有時候,我們需要寫一個for迴圈列出一個對象的所有屬性或者某個HTML Element下的所有節點,有了firebug後,我們不需要再寫這個for迴圈了,我們只需要使用console.dir(object)或console.dirxml(element)就可以了。
在測試頁中加入代碼測試一下: 複製代碼 代碼如下:console.dir(document.getElementById('div1'));
console.dirxml(document.getElementById('div1'));
結果請看圖11-6和圖11-7。
圖11-6
圖11-7
是否想知道代碼的運行速度?很簡單,使用console.time和console.timeEnd就可以。
修改一下test函數的代碼,測試一下運行1000次迴圈需要多少時間: 複製代碼 代碼如下:function test(){
console.time('test');
for(var i=0;i<1000;i++){
document.getElementById('div2').innerHTML=i;
//console.log('當前的參數是:%d',i);
}
console.timeEnd('test');
}
重新整理頁面,單擊“方塊二”,看看結果(圖11-8)。在這裡要注意的是console.time和console.timeEnd裡的參數要一致才會有正確的輸出,而該參數就是資訊的標題。
圖11-8
是否想知道某個函數是從哪裡調用的?console..trace可協助我們進行追蹤。在test函數的結尾加入:
console.trace();
重新整理頁面,單擊“方塊二”,看看結果(圖11-9)。結果顯示是在座標(97,187)的按一下滑鼠事件執行了test函數,而調用的指令碼是在simple.html檔案裡的第1行。因為是在HTML裡面的事件調用了test函數,所以顯示的行號是第1行。如果是指令碼,則會顯示呼叫指令碼的行號,通過單擊可以直接去到調用行。
圖11-9
如果想在指令碼某個位置設定斷點,可以在指令碼中輸入“debugger”作為一行。當指令碼執行到這一行時會停止執行等待使用者操作,這時候可以通過切換到“Script”標籤對指令碼進行調試。
Firebug還有其它的一些調試函數,這裡就不一一做介紹,有興趣可以自己測試。表4是所有函數的列表:
函數 |
說明 |
console.log(object[, object, ...]) |
向控制台輸出一個資訊。可以輸入多個參數,輸出將已空格分隔各參數輸出。 第一參數可以包含格式化文本,例如: console.log(‘這裡有%d個%s',count,apple); 字串格式: %s :字串。 %d, %i:數字。 %f: 浮點數。 %o -超連結對象。 |
console.debug(object[, object, ...]) |
向控制台輸出一個資訊,資訊包含一個超連結連結到輸出位置。 |
console.info(object[, object, ...]) |
向控制台輸出一個帶資訊表徵圖和背景顏色的資訊,資訊包含一個超連結連結到輸出位置。 |
console.warn(object[, object, ...]) |
向控制台輸出一個帶警告圖示和背景顏色的資訊,資訊包含一個超連結連結到輸出位置。 |
console.error(object[, object, ...]) |
向控制台輸出一個帶錯誤表徵圖和背景顏色的資訊,資訊包含一個超連結連結到輸出位置。 |
console.assert(expression[, object, ...]) |
測試一個表示是否為true,如果為false,提交一個例外資訊到控制台。 |
console.dir(object) |
列出對象的所有屬性。 |
console.dirxml(node) |
列出HTML或XML Element的XML源樹。 |
console.trace() |
輸出堆棧的調用入口。 |
console.group(object[, object, ...]) |
將資訊分組再輸出到控制台。通過console.groupEnd()結束分組。 |
console.groupEnd() |
結束分組輸出。 |
console.time(name) |
建立一個名稱為name的計時器,計算代碼的執行時間,調用console.timeEnd(name)停止計時器並輸出執行時間。 |
console.timeEnd(name) |
停止名稱為name的計時器並輸出執行時間。 |
console.profile([title]) |
開始對指令碼進行效能測試,title為測試標題。 |
console.profileEnd() |
結束效能測試。 |
console.count([title]) |
計算代碼的執行次數。titile作為輸出標題。 |
表4 |
12、 在IE中使用Firebug
Firebug是Firefox的一個擴充,但是我習慣在IE中調試我的頁面怎麼辦?如果在頁面指令碼中加入console.log()將調試資訊寫到Friebug,在IE中肯定是提示錯誤的,怎麼辦?不用擔心,Frirebug提供了Frirbug Lite指令碼,可以插入頁面中模仿Firebug控制台。
我們可以從一下地址下載firebug lite:
http://www.getfirebug.com/releases/firebuglite1.0-b1.zip
然後在頁面中加入:
<script language="javascript" type="text/javascript" src="/路徑/firebug.js"></script>
如果你不想在IE中模仿Friebug控制台,只是不希望console.log()指令碼出現錯誤資訊,那麼在頁面中加入一下語句:
<script language="javascript" type="text/javascript" src="/路徑/firebugx.js"></script>
如果你不想安裝Firebug Lite,只是想避免指令碼錯誤,那麼可以在指令碼中加入以下語句:
if (!window.console || !console.firebug)
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
我們將firebug.js加入到測試頁面中,然後開啟IE,載入頁面。頁面載入完成後,我們按下F12鍵就可以開啟控制台了。每次頁面重新整理後,你都要按F12鍵開啟控制台,是不是很煩?如果不想那麼,就在html標籤中加入“debug='true'”,例如:
<html debug="true">
在Friebug Lite中也有命令列,但是功能沒那麼強。