ES6部分方法点评(三):babel-preset-es2015-loose可转换且移动端兼容性较好的语法
来源:互联网 发布:linux添加uid 编辑:程序博客网 时间:2024/06/12 23:28
本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。
原文地址:https://segmentfault.com/a/1190000005688656
前言
由于目前各浏览器对ES6兼容性较低,再加上需要兼容历史上各种版本的浏览器,因此,使用编译器将ES6语法转译成ES5语法则势在必行了。babel是目前最常用的ES6转ES5的工具,但即使是ES5,各浏览器的支持度也是不一的,因此便产生了本文,找出一些能够被翻译成兼容性高代码的ES6语法。
讨论基础
- 兼容
IE10+
、android4.0+
、ios6+
。 - 使用babel的一个preset:
babel-preset-es2015-loose
,原因如下:
在android4.0下面报esModule错误的问题,如下:
Uncaught TypeError: Cannot assign to read only property '__esModule' of #<Object>。
经查证,发现是构建中babel-es2015 loader的模式问题,会导致Android4.0的用户有报错。只需要使用loose mode就可以解决问题。下面是相关的stackoverflow issue以及对应解决问题的npm包。
- 作者使用webpack作为构建工具,并使用babel-loader调用babel来进行转换,但实际上不会对转换出来的代码造成任何影响。
可用的ES6语法
const、let
const是由babel自己来判断是否抛出异常的,生成的代码只是普通的var;let则是改了下变量名,用的依然是var。简单的结构
之所以加“简单”,是因为简单的结构
转换出来的也就是简单的代码,没啥问题。但是如果是复杂的结构
,那就会用到Symbol.iterator
这兼容性不佳的方法了。函数参数默认值
箭头函数
函数剩余参数(Rest Parameters)
对象字面量扩展(Object Literal Extensions)中的精简属性、精简方法
这俩其实没省多少事,所以转换也很简单。模板字符串(template string)
模块化
由于模块化主要还是用在开发阶段,完事了打包到一起不会有什么奇怪的代码出现,因此这一点不需要担心。
慎用的ES6语法
- 对象字面量扩展(Object Literal Extensions)中的计算属性
/* 转换前 */const prop2 = "PROP2";var obj = { [prop2]: 3};/* 转换后 */function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }var prop2 = "PROP2";var obj = _defineProperty({}, prop2, 3);
由上可知,这里用到了一个ES5方法Object.defineProperty
,MDN说是IE9+,android/ios全系列的。
- 类
转换出来的代码太多,没细看,咋一看也是有Object.defineProperty
,慎用吧,有经验的兄弟也可以说一声会不会出问题。
不可用
- for…of
因为会使用到Symbol.iterator
参考资料
- caniuse.com,用来查浏览器兼容性。
- babel 到底将代码转换成什么鸟样?,感谢
@lcxfs1991
。 - babel官网 - 试验转换后的代码
本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。
原文地址:https://segmentfault.com/a/1190000005688656
- ES6部分方法点评(三):babel-preset-es2015-loose可转换且移动端兼容性较好的语法
- babel-preset-es2015安装
- ES6部分方法点评(一)
- ES6部分方法点评(二)
- babel 编译es6 connot find preset 解决方案
- es6转为es5:Babel下的ES6兼容性与规范
- ES6/ES2015常用语法(下)
- ES6语法的reactjs组件babel编译
- ES6/ES2015常用语法 (上)
- babel && babel-preset-env
- ES2015(ES6)(上)
- 使用babel写ES6语法
- nodejs支持ES6语法(BABEL)
- 【web开发 ES6新增语法】常用ES2015/ES6新增语法的使用
- vue使用vue-ueditor碰到的问题(Couldn't find preset "es2015" relative to directory)
- 移动端对es6的支持度以及babel的安装
- ECMAScript 6 学习系列课程 (ES6 gulp+babel 语法转化的相关用法)
- Babel——ES6转换
- 使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)
- gcc 的过程及原理 -o
- 极光短信验证码的集成过程
- 关于USACO
- 调优JVM内存,并解决OutOfMemoryError,StackOverflowError等异常问题
- ES6部分方法点评(三):babel-preset-es2015-loose可转换且移动端兼容性较好的语法
- 回归分析:预测 VS 因果分析
- 全栈必备:Linux 基础
- Java序列化之开篇
- C语言中可变参数函数实现
- 压力测试工具 jmeter 使用发送json报文
- Xcode8上传应用包成功后,iTunes里不显示构建版本
- uninstall_VS2015 to change the installing path
- iOS-UITouch事件处理详解