本文仅先给使用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,仅此而已,如此简单。