版本:0.80
JavaScript 环境
JavaScript 运行时
使用 React Native 时,你的 JavaScript 代码最多会运行在三种环境中:
- 在大多数情况下,React Native 会使用 Hermes,这是一个为 React Native 优化的开源 JavaScript 引擎。
- 如果禁用 Hermes,React Native 将使用 JavaScriptCore,这也是为 Safari 提供支持的 JavaScript 引擎。请注意,在 iOS 上,由于 iOS 应用中没有可写的可执行内存,JavaScriptCore 不会使用 JIT。
- 使用 Chrome 调试时,所有 JavaScript 代码都运行在 Chrome 本身中,并通过 WebSockets 与原生代码通信。Chrome 使用 V8 作为其 JavaScript 引擎。
虽然这些环境非常相似,但你可能仍会遇到一些不一致之处。最好避免依赖任何运行时的特定实现细节。
JavaScript 语法转换器
语法转换器让编写代码更加愉快,因为你可以使用新的 JavaScript 语法,而不必等待所有解释器都支持它。
React Native 自带 Babel JavaScript 编译器。有关其支持的转换,请查看 Babel 文档 以了解更多细节。
React Native 已启用转换的完整列表可以在 @react-native/babel-preset 中找到。
| 转换 | 代码 |
|---|---|
| ECMAScript 5 | |
| 保留字 | |
| ECMAScript 2015 (ES6) | |
| 箭头函数 | |
| 块作用域 | |
| 调用展开 | |
| 类 | |
| 计算属性 | |
| 常量 | |
| 解构 | |
| for…of | |
| 函数名 | |
| 字面量 | |
| 模块 | |
| 对象简洁方法 | |
| 对象简写 | |
| 参数 | |
| 剩余参数 | |
| 简写属性 | |
| 粘性正则 | |
| 模板字面量 | |
| Unicode 正则 | |
| ECMAScript 2016 (ES7) | |
| 幂运算符 | |
| ECMAScript 2017 (ES8) | |
| 异步函数 | |
| 函数尾随逗号 | |
| ECMAScript 2018 (ES9) | |
| 对象展开 | |
| ECMAScript 2019 (ES10) | |
| 可选 catch 绑定 | |
| ECMAScript 2020 (ES11) | |
| 动态导入 | |
| 空值合并运算符 | |
| 可选链 | |
| ECMAScript 2022 (ES13) | |
| 类字段 | |
| Stage 1 提案 | |
| 从默认导出 | |
| 其他 | |
| Babel 模板 | |
| Flow | |
| ESM 转 CJS | |
| JSX | |
| Object Assign | |
| React 显示名称 | |
| TypeScript | |
Polyfills
许多标准函数也可在所有受支持的 JavaScript 运行时中使用。
浏览器
- CommonJS
require console.{log, warn, error, info, debug, trace, table, group, groupCollapsed, groupEnd}XMLHttpRequest,fetch{set, clear}{Timeout, Interval, Immediate}, {request, cancel}AnimationFrame
ECMAScript 2015 (ES6)
Array.fromArray.prototype.{find, findIndex}Object.assignString.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes
ECMAScript 2017 (ES8)
Specific
__DEV__