现在的浏览器为了方便调试javascript,往往都自带console
对于firefox我们可以使用firebug。
IE浏览器从IE7之后开始带开发人员工具
Chrome 也有自己的调试工具
Opera Safari 很少用,略过不提
在自己的类库中想去调用浏览器的控制台,我的做法如下:
var K={
log:(window.console&&window.console.log)||function(){}
}
如果在window对象下有console对象,并且console有log方法,则K.log等于console.log,否则给K.log一个空方法,使以后调用K.log的时候不会出错,
对于IE6,在不装任何扩展的情况下,K.log是个空方法,这很正常
其它浏览器也都能正常的工作,然而chrome 8.0.558不行,这样写会出错(详情见我的上一篇文章)
因此我把方法改成
方法一:
var K={
log:function(){
window.console&&window.console.log&&window.console.log(arguments);
};
这样在所有浏览器下都可正常运行,但是在控制台输出的时候,和原始的方法会有些不一样
后来代码改成
方法二:
var K={
log:function(){
var a=window.console,b=arguments;
if(a&&a.log){
a.log.apply(a,b);
}
}
}
这样就可以变相使用原生的console.log,然而事实总不是那么美好,IE8下 console.log没有apply及call,
所以上面代码会出错,哎,代码就只好改成了
方法三:
var K={
log:function(){
var a=window.console,b=arguments;
if(a&&a.log){
a.log.apply?a.log.apply(a,b):a.log(b);
}
}
}
这样就没有问题了,因为arguments是个类数组的东西,所以直接调用a.log(arguments);在控制台输出一个简单的字符串时,前后会加上中括号,而原生的console.log方法是不加的。
不想采用方法二就是这个原因,ff下调用console.log('ab');和(function(){console.log(arguments)}('ab'))输出结果是不一样的
目前只好凑合用方法三了