以前javascript對於IO的支持很弱,不能寫入相應的文本文件中,而且異常對象Error也不統一,無法打印詳細的堆棧。自定義異常對象是個非常不討好的方法,因為通常我們只看到其message屬性,再者,其他自定義屬性需要用最慢的for...in循環遍歷出來。這時沒有辦法了,我們只有求助於浏覽器的各種私有實現,如firefox就有console.log。下面是console對象的方法列表,關於firebug更詳細的使用可見這篇文章。
函數 |
說明 |
log(obj[, obj, ...])
向控制台輸出一個信息。可以輸入多個參數,輸出將已空格分隔各參數輸出。
第一參數可以包含格式化文本,例如:
log(‘這裡有%d個%s',count,apple);
字符串格式:
%s:字符串。
%d, %i:數字。
%f: 浮點數。
%o -超鏈接對象。
debug(obj[, obj, ...])
向控制台輸出一個信息,信息包含一個超鏈接鏈接到輸出位置。
info(obj[, obj, ...])
向控制台輸出一個帶信息圖標和背景顏色的信息,信息包含一個超鏈接鏈接到輸出位置。
warn(obj[, obj, ...])
向控制台輸出一個帶警告圖標和背景顏色的信息,信息包含一個超鏈接鏈接到輸出位置。
error(obj[, obj, ...])
向控制台輸出一個帶錯誤圖標和背景顏色的信息,信息包含一個超鏈接鏈接到輸出位置。
assert(expression[, obj, ...])
測試一個表示是否為true,如果為false,提交一個例外信息到控制台。
dir(obj)
列出對象的所有屬性。
dirxml(node)
列出HTML或XML Element的XML源樹。
trace()
輸出堆棧的調用入口。
group(obj[, obj, ...])
將信息分組再輸出到控制台。通過groupEnd()結束分組。
groupEnd()
結束分組輸出。
time(name)
創建一個名稱為name的計時器,計算代碼的執行時間,調用timeEnd(name)停止計時器並輸出執行時間。
timeEnd(name)
停止名稱為name的計時器並輸出執行時間。
profile([title])
開始對腳本進行性能測試,title為測試標題。
profileEnd()
結束性能測試。
count([title])
計算代碼的執行次數。titile作為輸出標題。
firebug就自不多說了,IE8也有console.log,不過這需要按下F12,進入調試模式時才有效,不然報錯。為了不報錯,平時我們應該實現一個空對象來覆蓋它。
復制代碼 代碼如下:
if (!window.console ){
window.console = {};
var methods = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"],
noop = function(){}
for (var i = 0,method;method=methods[i++];)
window.console[method] = noop;
}
大概opera9.5x之後吧,多了一個叫Dragonfly的東東。顯然,它無法與firebug花樣繁多的日志輸出相比,它只提供了一個opera.postError方法。
復制代碼 代碼如下:
if (window.opera && opera.postError) {
opera.postError(message);
}
safari也有console.log,它是基於其Web Inspector組件,感覺與firefox差不多,但我不是水果黨,不知道其方法有沒有firebug那麼多……對於浏覽器新貴chrome,現在我們可以在其擴展程序搜索安裝firebug的chrome版本。