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/babel-preset 中找到 React Native 已启用的转换的完整列表。
转换 | 代码 |
---|---|
ECMAScript 5 | |
保留字 |
|
ECMAScript 2015 (ES6) | |
箭头函数 |
|
块级作用域 |
|
调用扩展 |
|
类 |
|
计算属性 |
|
常量 |
|
解构 |
|
for…of |
|
函数名称 |
|
字面量 |
|
模块 |
|
对象简洁方法 |
|
对象简写表示法 |
|
参数 |
|
剩余参数 |
|
简写属性 |
|
粘性正则表达式 |
|
模板字面量 |
|
Unicode 正则表达式 |
|
ECMAScript 2016 (ES7) | |
指数运算符 |
|
ECMAScript 2017 (ES8) | |
异步函数 |
|
函数尾随逗号 |
|
ECMAScript 2018 (ES9) | |
对象扩展 |
|
ECMAScript 2019 (ES10) | |
可选捕获绑定 |
|
ECMAScript 2020 (ES11) | |
动态导入 |
|
空值合并运算符 |
|
可选链 |
|
ECMAScript 2022 (ES13) | |
类字段 |
|
第一阶段提案 | |
导出默认值 |
|
其他 | |
Babel 模板 |
|
Flow |
|
ESM 到 CJS |
|
JSX |
|
对象分配 |
|
React 显示名称 |
|
TypeScript |
|
垫片
许多标准函数也可在所有受支持的 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.from
Array.prototype.{find, findIndex}
Object.assign
String.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes
ECMAScript 2017 (ES8)
特定
__DEV__