console.js还有浏览器不支持?
今天看到项目中引入了一个插件,我超级惊讶

为什么引入console.js啊?
这个是插件的源码:https://github.com/yanhaijing/console.js
我搜到源作者对这个插件的描述:“console.js is a small javascript library, fix console is undefined”
啥?还能够没有console.log?console.log还能够是undefined?
我真的超级惊讶,我以为所有的浏览器都有console.log,直接打开控制台就可以调试。
后来又和同事聊了下:

同事说:“这个是解决低版本IE的调试,不过也没啥用  IE调试和定位不是那么容易的,未来几年后这个就不需要了,IE 微软都快要抛弃了”
看了下作者里面的源码,比如看了下package.json了解了下作者写这个插件涉及到的npm包

根据这个我大概得出的结论就是使用一些工具,将es6写法的js转成2015版本的,让浏览器识别,并且内部也会有断言。
看一下index.js中的内容
const apply = Function.prototype.apply;
export function polyfill() {
//判断window类型,有就是一个对象类型 为g
    const g = typeof window !== 'undefined' ? window : {};
    //g有个属性是console
    const _console = g.console || {};
    const methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'exception', 'error', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];
    const console = {};
//便利console这个对象的方法
    for (let i = 0; i < methods.length; i++) {
        const key = methods[i];
        console[key] = function() {
                //判断console的方法是否存在
            if (typeof _console[key] === 'undefined') {
                return;
            }
            // 添加容错处理
            try {
                return apply.call(_console[key], _console, arguments);
            } catch (e) {}
        };
    }
    g.console = console;
}
export function safeExec(cmd, ...args) {
    try {
        return apply.call(console[cmd], console, args);
    } catch (e) {}
}
export function log(...args) {
    return safeExec('log', ...args);
}
export function info(...args) {
    return safeExec('info', ...args);
}
export function warn(...args) {
    return safeExec('warn', ...args);
}
export function error(...args) {
    return safeExec('error', ...args);
}
export function log1(msg) {
    try {
        return console.log('log:', msg);
    } catch(e) {}
}
export function warn1(msg) {
    try {
        return console.warn('warn:', msg);
    } catch(e) {}
}
export function error1(msg) {
    try {
        return console.error('error:', msg);
    } catch(e) {}
}
后记:其实我没有看懂,也不知道作者是怎么写这个的,我觉得很厉害。
console.js还有浏览器不支持?的更多相关文章
- js检测浏览器是否支持某属性
		以检测浏览器是否支持 input 标签的 required 属性为例: var isSupport = 'required' in document.createElement('input'); 
- JS判断浏览器是否支持某一个CSS3属性
		1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的ani ... 
- js判断浏览器是否支持flash的方法
		传统浏览器可以使用window.ActiveXObject检查浏览器是否启用相关的控件.检查浏览器是否启用flash控件,需要先检查浏览器是否支持ActiveXObject,可以使用typeof检查w ... 
- JS判断浏览器是否支持某一个CSS3属性的方法
		var div = document.createElement('div'); console.log(div.style.transition); //如果支持的话, 会输出 "&quo ... 
- js判断浏览器是否支持webGL
		起因是我之前开发的网页,用到了three.js制作了一个3d的旋转球体效果. 在各种浏览器上运行都没问题,在IE上也做了兼容代码. 但是今天接电话,老板说你这网页在xp上不显示啊.IE上好使.goog ... 
- vue.js 微信浏览器不支持lambda表达式
		最近尝试在用vue重构一个微信网页,然后发现在本地测试是可以的,在微信测试工具里也是正常的,然后在手机里有人正常有人不正常,后来发现规律,微信比较新的是不支持的,微信比较旧的是不支持的.然后网上谷歌了 ... 
- JS检测浏览器是否支持HTML5视频播放 (标签<video>) ,
		function checkVideo() { if (!!document.createElement('video').canPlayType) { var vidTest = document. ... 
- JS判断浏览器是否支持触屏事件
		var hasTouch=function(){ var touchObj={}; touchObj.isSupportTouch = "ontouchend" in docume ... 
- js判断浏览器类型和版本
		原网址:http://www.cnblogs.com/rubylouvre/archive/2009/10/14/1583362.html 除了另无它法,肯定不使用navigator.userAgen ... 
随机推荐
- typeof 、Object.prototype.toString和 instanceof
			数据类型 js 基本类型包括:Undefined symbol null string boolean number js 引用类型包括:object array Date RegExp typeo ... 
- 电脑缺失ACPI.sys
			解决方法:注:U盘内需要有PE系统 拷贝一份正常的acpi.sys文件到u盘,插入电脑 > 开机时按F9 > 选中第三个USB *** > 回车进入PE系统,将acpi.sys放入图 ... 
- 牛客NOIP暑期七天营-TG1 赛后题解
			目录 牛客NOIP暑期七天营-提高组1 A-最短路 题目描述 link 题解 代码 B-最小生成链 题目描述 link 题解 代码 C-最小字典最短路 题目描述 link 题解 Update 牛客NO ... 
- JavaScript数据可视化编程书籍上面的例子(flotr2)
			先看demo再看例子 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ... 
- springcloud之配置中心用法
			一.配置文件服务器server端 1.构建server端所需jar <dependencies> <dependency> <groupId>org.springf ... 
- wsoj「G2016 SCOI2018 Round #12」建筑师
			传送门 小半个月前的测试,现在翻出来. 考试时我和sxyA了这题. 当时随便搞了个dp,dp[i][j]表示i个数能看到j个的情况数,考虑新加入一个比之前i-1个数都小的数,能看到它的情况是它加到第一 ... 
- php循环语句(二)
			for 循环 for 循环用于您预先知道脚本需要运行的次数的情况. 语法 for (初始值; 条件; 增量) { 要执行的代码; } 参数: 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以 ... 
- Hdu 2376
			题目链接 题意:给出一颗含有n个结点的树,树上每条边都有一个长度,求树上所有路径的平均长度. 考虑树上每条边对所有路径长度和的贡献,对于每条偶 就是边的两个短点u和v,只需要记录以u为根的子树的结点的 ... 
- 转:linux驱动开发的经典书籍
			源地址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为 ... 
- Python Flask高级编程之从0到1开发《鱼书》精品项目
			Python Flask高级编程之从0到1开发<鱼书>精品项目 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感 ... 
