版本:0.85
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 | |
| 对象赋值 | |
| 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__