【问题标题】:ES6 on JavaScriptCore and React NativeJavaScriptCore 和 React Native 上的 ES6
【发布时间】:2016-07-20 13:28:47
【问题描述】:

我试图弄清楚 React Native 支持 ES6 的哪些部分。我知道here 列出的 Babel 转换,但我很难弄清楚 JavaScriptCore 自己支持什么 没有任何转译。就像 JavaScriptCore 会在不同的平台和设备上支持不同的东西吗? iOS 8 和 iOS9 有区别吗?

例如,我编写了一些使用生成器函数和 ES6 集合类型的代码,这些代码不属于 Babel 转换中列出的内容,并且它在我测试的设备上的 React Native 中运行良好。但我怎么知道它是否适用于我所定位的所有设备?

【问题讨论】:

    标签: javascript android ios ecmascript-6 react-native


    【解决方案1】:

    正如您提到的,React Native 使用 JavaScriptCore 作为 Javascript 引擎。 JavaScriptCore 也是 iOS 的 Safari 使用的引擎。对于 Andriod,一般使用 V8。所以你只需要在a compatability table like this one.中查看当前的功能支持

    【讨论】:

      【解决方案2】:

      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 is not a function (evalating 'Number.isInteger(u)')

      他们有 iOS 8.1.2。 他们的 userAgent 是 Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B440

      但是在 iOS 10.3.1(使用我的 iPhone 或模拟器)上,此方法存在并且工作正常。我的 userAgent 是 Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E8301

      另外,据Caniuse称,这个功能出现在Safari Mobile 9中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-25
        相关资源
        最近更新 更多