JavaScript 环境
JavaScript 运行时
使用 React Native 时,你的 JavaScript 代码会在最多三种环境中运行:
- 在大多数情况下,React Native 会使用针对 React Native 优化的开源 JavaScript 引擎 Hermes。
- 如果禁用 Hermes,React Native 会使用支持 Safari 的 JavaScript 引擎 JavaScriptCore。请注意,在 iOS 上,由于 iOS 应用不允许可写的可执行内存,JavaScriptCore 不使用 JIT。
- 当使用 Chrome 调试时,所有 JavaScript 代码都会在 Chrome 内部运行,并通过 WebSockets 与原生代码通讯。Chrome 使用其 JavaScript 引擎 V8。
虽然这些环境非常相似,但你可能会遇到一些不一致的情况。最佳做法是避免依赖任何运行时的具体实现。
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) | |
| 类字段 | |
| 阶段 1 提案 | |
| Export Default From | |
| 杂项 | |
| 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)
特殊
__DEV__