初次了解polyfill

最近经常看到这个词,知道这是处理浏览器相关的东西,但是不知道怎么用

参考

首先要了解一下,ECMAScript5(2009),大部分浏览器都支持,参考资料,比如这个Object/array literal extensions - Getter accessors,在w3c上看js - js objects - object accessors,在mdn上看js - js reference - functions - getter,看Specifications有个ECMAscript5.1(ECMA-262),状态是Standard, 然后看Browser compatibility上Desktop browsers,get在IE9是支持的,就是说IE8不支持。

查看wiki关于polyfill的介绍, 这里面提到了es5-shim, 说的是ECMAScript 5th Edition。

然后看一下某个polyfill的网站, 可以看到在SUPPORTED BROWSERS看到Internet Explorer最小支持的版本是8, 然后可以自己生成需要的polyfill文件,不过没看明白这上面是不是很多内容都不支持?

在mdn中,一般的词条后面都会有Browser compatibility

在这个ECMAScript兼容性表中查很详细,不过只提到了IE11

在babel的官方查文档,即Docs - Usage - polyfill里面,有提到了@babel/polyfill这个包,这上面提到Babel 7.4.0这个包就被弃用了

在babel的官网查看General - Caveats,里面提到了ES5和Internet Explorer,可以说使用@babel/polyfill可以兼容一些老的浏览器

在webpack官网查文档,在DOCUMENTATION - CONCEPTS - Concepts - Browser Compatibility提到兼容性问题,然后webpack支持在所有服从ES5的浏览器(IE8和以下版本不支持),就是说经过webpack打包的文件,基本支持大部分浏览器,IE8老古董了,估计要用Polyfill了。

在webpack的DOCUMENTATION - GUIDES - Shimming - Loading Polyfills 说到如何加载polyfill, 在DOCUMENTATION - LOADERS - babel-loader - Babel is injecting helpers into each file and bloating my code!这里有提到babel的runtime包是不是包含了polyfill。

测试案列:

比如这样一个代码

let a = [1,2,3]
let b = [4,5,6]
let c = [...a,...b]console.log(c)// 期待输出是[1,2,3,4,5,6]

这里用到了spread syntax,搜索a better way to concatenate arrays,这个属于spread in array literals,然后看到Internet Explorer不支持。

使用Chrome打开控制台看到了输出没报错,使用Internet Explorer11的话,就会看到报错syntax error

使用webpack进行打包,在只有webpack和webpack-cli的情况下使用

使用打包后的js文件,使用Internet Explorer11发现结果是正常输出了。不过Internet Explorer11以下就不知道了,很可能就是不支持的,之前提到这些浏览器要服从ECMAScript5,就是看这个表

这里没有我还安装不了IE11以下的版本,就算安装也比较麻烦,所以这里就不测试了。

不过文章中提到要加载Polyfill。

下面测试一下ES2016的语法可以用不

测试案例:

var array1 = [1,2,3]console.log(array1.includes(2))// 期待输出是true

这个在mdn中js -js ref - standard built-in objects - Array - Array.prototype.includes()

在IE11中测试报错Object doesn't support property or method 'includes',使用chrome的话输出true,现在用webpack打包npx webpack,继续测试IE11还是这个报错。

不过发现IE11浏览器的可以模拟低版本的IE浏览器,11,10,9,8,7,5这几个版本。

总结:

一般自己先了解一下哪些方法某些浏览器可能不支持,然后看Specifications(规范)知道这是ECMAScript 2015语法,看Browser compatibility(浏览器兼容性)看到,使用webpack打包基本能处理ECMAScript2015成ECMAScript5,而且旧浏览器的话需要使用polyfill,然后想要处理ECMAScript2016+的话,可能就要用到babel了。

初次了解polyfill相关推荐

  1. celery的初次使用

    celery的初次使用 基本步骤: 选择并且安装一个消息中间件(Broker) 安装 Celery 并且创建第一个任务 运行职程(Worker)以及调用任务 跟踪任务的情况以及返回值 应用 创建第一个 ...

  2. 阿里云服务器ECS Ubuntu16.04 初次使用配置教程(图形界面安装)

    阿里云服务器ECS Ubuntu16.04 初次使用配置教程(图形界面安装) 2019-01-23 22:55:50 laugh12321 阅读数 851更多 分类专栏: ECS Ubuntu 版权声 ...

  3. 人脸识别算法初次了解

    人脸识别算法初次了解 这是转载别人的帖子,认为好,大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此 ...

  4. Cash Shuffle初次测试成功,BCH隐私研究逐步推进

    早在去年12月,一项名为 Cash Shuffle的比特币现金项目就被提了出来,该项目旨在通过混淆交易信息来保证BCH交易隐私.该项目在当时引起了社区的热议,因为隐私属性一直是加密货币最重要的属性之一 ...

  5. MySQL的安装和初次使用

    MySQL的安装和初次使用 1.去数据库的官网http://www.mysql.com下载MySQL: 2.找到如下图所示: 下好后按照next/execut安装即可,会有设置密码页: 安装好以后可能 ...

  6. position:sticky 的 polyfill——stickyfill 源码浅析

    本人最近在修改 blogsue 中的样式时,使用到了 position: sticky.话不多说,开始主要内容. 定义 position: sticky 是 CSS position 属性的一个新值. ...

  7. 初次安装Magento商城 后台报错的解决方案

    今天初次安装Magento, 开始装的是英文版,后来又找到中文版 安装后在后台都有同一个错误,就是登陆后台,随便点击一个链接,都有报错 There has been an error processi ...

  8. Struts2笔记——初次框架配置

    1.Struts2简介   Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  9. git 上传代码到指定仓库_初次使用git上传代码到github远程仓库

    一.新建代码库 注册好github登录后,首先先在网页上新建代码库. 点击右上角"+"→New repository 进入如下页面:按照要求填写完成后,点击按钮创建代码库创建成功. ...

最新文章

  1. Swift -布局框架SnapKit使用
  2. js中的装饰器执行顺序
  3. vscode如何设置自动保存时自动格式化代码
  4. msp430g2553串口接受数据_MSP430G2553串口通信
  5. php 逗号运算符,基础篇PHP运算符总结宝典
  6. C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove
  7. shiro 删除用户session_我的shiro之旅: 十二 shiro 踢出用户(同一用户只能一处登录)...
  8. linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统
  9. 从Mysql某一表中随机读取n条数据的SQL查询语句
  10. Struts2中Session的使用
  11. servlet url-pattern配置中 / 和 /* 的区别 记录
  12. 脉脉第一干货贴,互联网职场那点事,关于面试、绩效、晋升、职业规划。
  13. python selenium po_python+selenium基于po模式的web自动化测试框架
  14. 21天Jmeter打卡Day10线程用户之setUp和tearDown
  15. wordpress建立数据库连接时出错
  16. opencv学习笔记(三)颜色转换 cvtColor
  17. 40163 php,【PHP】微信支付JsApi 40163错误,_PHP_ 少侠科技
  18. c语言编程利用泰勒级数,C语言程序设计:用泰勒级数计算cos
  19. 单链表的逆置(递归和非递归)
  20. 前端开发者思考:假如5年后你是开发总监

热门文章

  1. c语言strlen用法,如何使用c语言中的strlen()函数
  2. 百度定位实时获取位置android,通过百度定位sdk获取实时位置
  3. 【智能工厂】PPT案例分享:智慧工厂解决方案
  4. 【云扩RPA】HowToEmailAutomation
  5. 百度智能小程序巡检调度方案演进之路
  6. win10下解决编译环境find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer
  7. Java开发的几个就业方向
  8. 大数据生态(六)zookeeper集群部署(Linux和Windows[含一键启动脚本])
  9. win10下的dos基本命令
  10. 关于Gson的TypeToken