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 | |
Polyfill
许多标准函数在所有受支持的 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)
特定内容
__DEV__