今天看到项目中引入了一个插件,我超级惊讶



为什么引入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还有浏览器不支持?的更多相关文章

  1. js检测浏览器是否支持某属性

    以检测浏览器是否支持 input 标签的 required 属性为例: var isSupport = 'required' in document.createElement('input');

  2. JS判断浏览器是否支持某一个CSS3属性

    1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的ani ...

  3. js判断浏览器是否支持flash的方法

    传统浏览器可以使用window.ActiveXObject检查浏览器是否启用相关的控件.检查浏览器是否启用flash控件,需要先检查浏览器是否支持ActiveXObject,可以使用typeof检查w ...

  4. JS判断浏览器是否支持某一个CSS3属性的方法

    var div = document.createElement('div'); console.log(div.style.transition); //如果支持的话, 会输出 "&quo ...

  5. js判断浏览器是否支持webGL

    起因是我之前开发的网页,用到了three.js制作了一个3d的旋转球体效果. 在各种浏览器上运行都没问题,在IE上也做了兼容代码. 但是今天接电话,老板说你这网页在xp上不显示啊.IE上好使.goog ...

  6. vue.js 微信浏览器不支持lambda表达式

    最近尝试在用vue重构一个微信网页,然后发现在本地测试是可以的,在微信测试工具里也是正常的,然后在手机里有人正常有人不正常,后来发现规律,微信比较新的是不支持的,微信比较旧的是不支持的.然后网上谷歌了 ...

  7. JS检测浏览器是否支持HTML5视频播放 (标签<video>) ,

    function checkVideo() { if (!!document.createElement('video').canPlayType) { var vidTest = document. ...

  8. JS判断浏览器是否支持触屏事件

    var hasTouch=function(){ var touchObj={}; touchObj.isSupportTouch = "ontouchend" in docume ...

  9. js判断浏览器类型和版本

    原网址:http://www.cnblogs.com/rubylouvre/archive/2009/10/14/1583362.html 除了另无它法,肯定不使用navigator.userAgen ...

随机推荐

  1. Mui本地打包笔记(一)使用AndroidStudio运行项目 转载 https://blog.csdn.net/baidu_32377671/article/details/79632411

    转载 https://blog.csdn.net/baidu_32377671/article/details/79632411 使用AndroidStudio运行HBuilder本地打包的Mui项目 ...

  2. php面向对象的初认识

    面向对象的基本概念 面向对象的三大特征:继承 封装 多态 类和对象: 类是一个抽象的概念 对象是一个具体的实例 张三是一个对象,李四也是一个对象.王五同样是一个对象..... 他们都隶属于“人”这个“ ...

  3. hibernate离线条件查询设置or关系

    detachedCriteria.add(Restrictions.or(Restrictions.isNull(""), Restrictions.isNull("&q ...

  4. 一次读懂mybatis中的缓存机制

    缓存功能针对于查询(没听说果UPDATE,INSERT语句要缓存什么,都是直接执行的) 默认情况下,mybatis会启用一级缓存. 如果使用同一个session对象调用了相同的SELECT语句,则直接 ...

  5. 表格Table好看的样式表

    caption { padding: 0 0 5px 0; width: 700px; font: italic 11px "Trebuchet MS" , Verdana, Ar ...

  6. 6.Spring【AOP】XML方式

    1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切 ...

  7. pickle序列化一个函数,将fun()取出文件

    pickle序列化一个函数,将fun()取出文件

  8. Python-流程控制 if判断

    目录 if 判断 语法 单分支结构 双分支结构 多分支结构 for循环 语法 for + break for + continue for + else range函数 for + if 练习 if ...

  9. Ionic cordova-plugin-splashscreen

    1.添加插件 cordova plugin add https://github.com/apache/cordova-plugin-splashscreen.git 2.设置启动画面 在根目录下面r ...

  10. JavaSE_01_Exception类

    1.1 异常概念 指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java ...