跳到主要内容
新架构实战课 实操 + 基建 + 原理全维度包揽,抢先掌握 React Native 新架构精髓 立即查看 >Version: 0.69

JavaScript 环境

JavaScript 运行时环境

在使用 React Native 时,你的 JavaScript 代码将会运行在两个不同的环境上:

  • 大多数情况下,React Native 使用的是JavaScriptCore,也就是 Safari 所使用的 JavaScript 引擎。但是在 iOS 上 JavaScriptCore 并没有使用即时编译技术(JIT),因为在 iOS 中应用无权拥有可写可执行的内存页(因此无法动态生成代码)。
  • 在使用 Chrome 调试时,所有的 JavaScript 代码都运行在 Chrome 中,并且通过 WebSocket 与原生代码通信。此时的运行环境是V8 引擎

虽然两个环境非常类似,但开发者还是可能碰到一些不一致的地方。未来我们很可能会尝试一些其他的 JS 引擎,所以请尽量避免使用依赖于特定运行环境的代码。

常见的不一致比如有:iOS 上有部分日期构造函数未实现;Android 上重复定义的 props 可能会导致报错。

JavaScript 语法转换器

语法转换器可以使编写代码的过程更加享受,因为开发者可以借助转换器直接使用新的 JavaScript 语法标准,而无需等待 JS 解释器的支持。

React Native 内置了Babel 转换器。你可以查看Babel 的文档来了解有关它可以转换的语法的详情。

metro-react-native-babel-preset中可以看到目前 React Native 默认开启的语法转换特性。注:若想学习相关语法,译者推荐阮一峰老师的《ECMAScript 6 入门》

ES5

  • 保留关键字: promise.catch(function() { });

ES6

ES8

Stage 3

其他特性

  • JSX: <View style={{color: 'red'}} />
  • Flow: function foo(x: ?number): string {}
  • TypeScript: function foo(x: number | undefined): string {};
  • Babel Template: allows AST templating

接口兼容(Polyfills)

许多标准功能也都在支持的 JavaScript 运行环境上做了兼容支持。

浏览器

ES6

ES7

ES8

其他特性

  • __DEV__ 用于判断当前是否开发环境的全局变量