JavaScript環境
JavaScriptランタイム
React Nativeを使用する際、JavaScriptコードは最大で3つの環境で実行されます。
- ほとんどの場合、React NativeはReact Nativeに最適化されたオープンソースのJavaScriptエンジンであるHermesを使用します。
- Hermesが無効化されている場合、React NativeはSafariのエンジンであるJavaScriptCoreを使用します。iOSでは、アプリ内で書き込み可能な実行メモリが存在しないため、JavaScriptCoreはJITを使用しないことに注意してください。
- Chromeでデバッグを行う場合、すべてのJavaScriptコードはChrome自体の中で実行され、WebSocketを介してネイティブコードと通信します。ChromeはJavaScriptエンジンとしてV8を使用します。
これらの環境は非常に似ていますが、いくつかの非互換性に遭遇する可能性があります。特定のランタイムの仕様に依存することは避けるのが最善です。
JavaScript構文トランスフォーマー
構文トランスフォーマーは、すべてのインタプリタでのサポートを待つことなく新しいJavaScript構文を使用できるようにすることで、コーディングをより快適にします。
React NativeはBabel JavaScriptコンパイラを同梱しています。サポートされている変換の詳細については、Babelのドキュメントを確認してください。
React Nativeで有効になっている変換の完全なリストは@react-native/babel-presetにあります。
変換 | コード |
---|---|
ECMAScript 5 | |
予約語 |
|
ECMAScript 2015 (ES6) | |
アロー関数 |
|
ブロックスコープ |
|
Call spread |
|
クラス |
|
算出プロパティ |
|
定数 |
|
分割代入 |
|
for…of |
|
関数名 |
|
リテラル |
|
モジュール |
|
オブジェクトの簡潔なメソッド |
|
オブジェクトの短縮記法 |
|
パラメータ |
|
Restパラメータ |
|
プロパティの短縮記法 |
|
スティッキーな正規表現 |
|
テンプレートリテラル |
|
Unicode正規表現 |
|
ECMAScript 2016 (ES7) | |
べき乗演算子 |
|
ECMAScript 2017 (ES8) | |
非同期関数 |
|
関数の末尾カンマ |
|
ECMAScript 2018 (ES9) | |
オブジェクトスプレッド |
|
ECMAScript 2019 (ES10) | |
Optional Catch Binding |
|
ECMAScript 2020 (ES11) | |
動的インポート |
|
Null合体演算子 |
|
Optional Chaining |
|
ECMAScript 2022 (ES13) | |
クラスフィールド |
|
Stage 1 提案 | |
Export Default From |
|
その他 | |
Babel Template |
|
Flow |
|
ESM から CJSへ |
|
JSX |
|
Object Assign |
|
React Display Name |
|
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.from
Array.prototype.{find, findIndex}
Object.assign
String.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes
ECMAScript 2017 (ES8)
固有のもの
__DEV__