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) | |
| Async 函数 | |
| 函数尾随逗号 | |
| ECMAScript 2018 (ES9) | |
| 对象展开 | |
| ECMAScript 2019 (ES10) | |
| 可选 Catch 绑定 | |
| ECMAScript 2020 (ES11) | |
| 动态导入 | |
| 空值合并运算符 | |
| 可选链 | |
| ECMAScript 2022 (ES13) | |
| 类字段 | |
| Stage 1 提案 | |
| Export Default From | |
| 杂项 | |
| Babel 模板 | |
| Flow | |
| ESM to 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)
特定
__DEV__