我正在试图找出React Native支持ES6的哪些部分。我知道列出的{@ 3}}的Babel转换,但是我很难搞清楚JavaScriptCore在其自己的上支持什么而没有任何转换。 JavaScriptCore会支持不同平台和设备上的不同内容吗? iOS 8和iOS9有什么不同吗?
例如,我编写了一些使用生成器函数和ES6集合类型的代码,这些代码不属于Babel转换中列出的内容,它在我测试的设备上的React Native中运行良好。但我如何知道它是否适用于我所定位的所有设备?
答案 0 :(得分:2)
正如您所提到的,React Native使用JavaScriptCore作为Javascript引擎。 JavaScriptCore也是iOS使用的引擎。苹果浏览器。对于Andriod一般使用V8。因此,您只需在a compatability table like this one.
中查看当前功能支持答案 1 :(得分:1)
JavaScriptCore版本确实依赖于您的iOS版本,因此例如在iOS 8上您无法访问某些ES6方法,如下所述: https://mcculloughwebservices.com/2016/11/29/adding-support-es2015-number-methods/
他们甚至在帖子之后发了a polyfill,所以只需安装它:
npm install --save react-native-polyfill
并在应用的开头加载它:
import 'react-native-polyfill'
我最终在这里,因为Number.isInteger只是在使用我的React Native应用程序的设备上引发了错误:
TypeError:undefined不是函数(评估'Number.isInteger(u)')
他们有 iOS 8 .1.2。 他们的userAgent是 Mozilla / 5.0(iPhone; CPU iPhone OS 8_1_2,如Mac OS X) AppleWebKit / 600.1.4 (KHTML,如Gecko)Mobile / 12B440
然而,在iOS 10.3.1(使用我的iPhone或模拟器)上,此方法存在且工作正常。我的userAgent是 Mozilla / 5.0(iPhone; CPU iPhone OS 10_3_1,如Mac OS X) AppleWebKit / 603.1.30 (KHTML,如Gecko)Mobile / 14E8301
此外,根据Caniuse,此功能出现在Safari Mobile 9中。