JavaScript 環境
JavaScript ランタイム
React Nativeを使用する場合、JavaScriptコードは最大3つの環境で実行されます。
- ほとんどの場合、React Nativeは、React Native向けに最適化されたオープンソースのJavaScriptエンジンであるHermesを使用します。
- Hermesが無効になっている場合、React NativeはSafariを動作させるJavaScriptエンジンであるJavaScriptCoreを使用します。 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) | |
動的インポート |
|
Null合体演算子 |
|
オプショナルチェーン |
|
ECMAScript 2022 (ES13) | |
クラスフィールド |
|
ステージ1提案 | |
Export Default From |
|
その他 | |
Babelテンプレート |
|
Flow |
|
ESMからCJSへ |
|
JSX |
|
Object Assign |
|
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__