本文僅先給使用console調試的FE同窗,若是你還不知道console是什麼,或者還停留在alert
階段,那就不要浪費時間了,say bay bay!php
你是否試程序的過程當中用過console.log(***)
,發如今現代瀏覽器裏運行好好的,到了ie裏卻出現莫名其妙的錯誤,你徹底不知道爲何。css
或者你知道在ie下console不能使用,每次上線前都要註釋掉console的代碼,一不當心漏掉了一個。html
若是有過上面相似的狀況,和我有着一樣的煩惱,那恭喜你,console.js就是爲你準備的。(若是你用着很是牛逼的自動化工具,能自動過濾掉console的話,往下看下也是會有收穫的)html5
你還在寫相似下面這樣的代碼嗎?git
if (console && console.log) { console.log(***); }
或者github
console.log = console.log || function () {}
那麼是時候作出改變了,console.js會幫你解決這些問題。編程
console.js是一個微型js庫,用來修復在不支持或部分支持console的瀏覽器下,調用console.***
出錯的問題。api
這其實有點相似reset.css或者html5shim的作法,console.js參考了MSDN MDN Firebug三個文檔對console的介紹。是其中提到api的超集。瀏覽器
console.js的所有代碼以下,這麼簡單的代碼,仍是老規矩不解釋:app
;(function(g) { 'use strict'; var _console = g.console || {}; var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'exception', 'error', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn']; var console = {version: '0.1.0'}; var key; for(var i = 0, len = methods.length; i < len; i++) { key = methods[i]; console[key] = function (key) { return function () { if (typeof _console[key] === 'undefined') { return 0; } Function.prototype.apply.call(_console[key], _console, arguments); }; }(key); } g.console = console; }(window));
小貼士:你知道最前面的分號是幹嗎用的嗎?
實際上是爲了防止自動化工具拼接js時,前面的js的結尾處忘記了加分號,而後拼接出來的代碼就掛了。屬於防護式編程。
例如a.js和b.js代碼以下:
a.js
(function () { //... }())
b.js
(function () { //... }());
上面的代碼被合後就會變爲
(function () { //... }()) (function () { //... }());
這段代碼執行時就會報錯了,穿插一個小知識點,過小了,沒法自成文章。
更多信息請參考console.js的文檔。
我一直在思考還能夠作哪些改進,或者功能,僅此而已了嗎?固然不是,我能想到的還能夠作下面的一些改進。
增長一個對原始console的訪問接口,相似jq的noConflict,或者在如今的console上加一個對原來console的引用。
增長對域名的過濾功能,好比咱們可能只但願log信息在調試的時候輸出,而在線上時不作輸出。
目前對不支持的接口僅簡單賦值爲空函數,可考慮對不支持的接口作模擬,對不支持console功能的瀏覽器,提供自定義模擬console。
固然這些功能是否應該加入console.js,是個問題,應該思考下,console.js的初衷是什麼。。。
對於ie8 9瀏覽器,在首次打開控制檯時,會新建console對象,如今console.js,盡在頁面載入時作修復,沒法解決這個問題。
但對於打開控制檯的人,絕大多數應該不屬於用戶吧。($ _ $)
console.js 與console就想html5shim於html5,僅此而已,如此簡單。