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) | |
箭头函数 |
|
块级作用域 |
|
Call spread |
|
类 |
|
计算属性 |
|
常量 |
|
解构 |
|
for…of |
|
函数名 |
|
字面量 |
|
模块 |
|
对象简洁方法 |
|
对象简写符号 |
|
参数 |
|
Rest Params |
|
简写属性 |
|
Sticky Regex |
|
模板字面量 |
|
Unicode Regex |
|
ECMAScript 2016 (ES7) | |
求幂运算符 |
|
ECMAScript 2017 (ES8) | |
异步函数 |
|
函数尾逗号 |
|
ECMAScript 2018 (ES9) | |
对象展开 |
|
ECMAScript 2019 (ES10) | |
可选的 Catch Binding |
|
ECMAScript 2020 (ES11) | |
动态导入 |
|
Nullish Coalescing Operator |
|
可选链 |
|
ECMAScript 2022 (ES13) | |
类字段 |
|
Stage 1 Proposal | |
Export Default From |
|
其他 | |
Babel 模板 |
|
Flow |
|
ESM to CJS |
|
JSX |
|
Object Assign |
|
React Display Name |
|
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.from
Array.prototype.{find, findIndex}
Object.assign
String.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes
ECMAScript 2017 (ES8)
特定
__DEV__