1. 程式人生 > >JavaScript除錯技巧之console.log()詳解

JavaScript除錯技巧之console.log()詳解

對於JavaScript程式的除錯,相比於alert(),使用console.log()是一種更好的方式,原因在於:alert()函式會阻斷JavaScript程式的執行,從而造成副作用;
alert彈出框需要點選確認比較麻煩,而console.log()僅在控制檯中列印相關資訊,因此不會造成類似的顧慮。
最重要的是alert只能輸出字串,不能輸出物件裡面的結構,console.log()console.log()可以接受任何字串、數字和JavaScript物件,可以看到清楚的物件屬性結構,在ajax返回json陣列物件時除錯很方便。

//相容Firefox/IE/Opera使用console.log
if(!window.console){
window.console = {log : function(){}};
}
window.console = window.console || {};
console.log || (console.log = opera.postError);

下面分享兩張打印出來的資訊圖片:

php上傳多檔案console.log列印日誌

console.log 原先是 Firefox 的"專利",嚴格說是安裝了 Firebugs 之後的 Firefox 所獨有的除錯"絕招"。

IE8用起來比 Firebugs 麻煩,只有在開啟除錯視窗(F12)的時候,console.log 才能出結果,不然就報錯。
IE瀏覽器下預設是不支援console.log,反而會因為這句程式碼報錯,解決辦法是宣告該console物件的log函式為空函式
if(!window.console){
window.console = {log : function(){}};
}

Opera還是不能用 console.log 加上下面兩句程式碼相容:
window.console = window.console || {};
console.log || (console.log = opera.postError);
這樣Firefox/IE/Opera 都能用上console.log,不過沒有必要去做這種相容性工作 console.log()等除錯程式碼應當從最終的產品程式碼中刪除掉。

IE 和 Opera 下的 console.log 比起 Firebugs還是太過簡單,比如引數是 Object 或者陣列就沒有進一步的顯示功能。

//變數
var i = 'I am a string';
console.log('變數:',i);
//陣列
var arr = [1,2,3,4,5];
console.log('陣列:',arr);
//物件
var obj1 = {
key1 : 'value1',
key2 : 'value2',
key3 : 'value3'
};
var obj2 = {
key6 : 'value4',
key5 : 'value5',
key4 : 'value6'
};
var obj3 = {
key9 : 'value7',
key8 : 'value8',
key7 : 'value9'
};
console.log('物件:',obj1);
//物件陣列
var objArr1 = [obj1,obj2,obj3];
var objArr2 = [[obj1],[obj2],[obj3]];
console.log('物件陣列1:',objArr1);
console.log('物件陣列1:',objArr2);
/*
輸出:
變數:I am a string
陣列:[1, 2, 3, 4, 5]
物件:Object { key1="value1", key2="value2", key3="value3"}
物件陣列1:[Object { key1="value1", key2="value2", key3="value3"}, Object { key6="value4", key5="value5", key4="value6"}, Object { key9="value7", key8="value8", key7="value9"}]
物件陣列1:[[Object { key1="value1", key2="value2", key3="value3"}], [Object { key6="value4", key5="value5", key4="value6"}], [Object { key9="value7", key8="value8", key7="value9"}]]
*/

除了console.log(),Firebug還支援多種不同的日誌級別:debug、info、warn、error。以下程式碼將在控制檯中列印這些不同日誌級別的資訊:
程式碼如下://Use different logging level
console.log("Log level");
console.debug("Debug level");
console.info("Info level");
console.warn("Warn level");
console.error("Error level");
從Firebug控制檯中可以看到,不同日誌級別的列印資訊,其顏色和圖示是不一樣的;同時,可以在控制檯中選擇不同的日誌級別來對這些資訊進行過濾,不過這些比較少用到,不是很實用。