자바스크립트 실행 환경
JavaScript 런타임
React Native를 사용할 때 여러분의 JavaScript 코드는 최대 세 가지 환경에서 실행될 수 있다:
- 대부분의 경우, React Native는 Hermes를 사용한다. Hermes는 React Native에 최적화된 오픈소스 JavaScript 엔진이다.
- Hermes가 비활성화된 경우, React Native는 Safari의 JavaScript 엔진인 JavaScriptCore를 사용한다. iOS에서는 iOS 앱에서 쓰기 가능한 실행 메모리가 없기 때문에 JavaScriptCore가 JIT를 사용하지 않는다는 점에 유의해야 한다.
- Chrome 디버깅을 사용할 때는 모든 JavaScript 코드가 Chrome 자체 내에서 실행되며, WebSocket을 통해 네이티브 코드와 통신한다. Chrome은 V8을 JavaScript 엔진으로 사용한다.
이러한 환경들은 매우 유사하지만, 일부 불일치가 발생할 수 있다. 따라서 특정 런타임의 세부 사항에 의존하지 않는 것이 가장 좋다.
자바스크립트 구문 변환기
구문 변환기를 사용하면 모든 인터프리터에서 지원될 때까지 기다리지 않고도 최신 자바스크립트 구문을 활용해 코드를 작성할 수 있다. 이를 통해 개발 경험을 더욱 즐겁게 만들 수 있다.
React Native는 Babel 자바스크립트 컴파일러를 기본으로 제공한다. 지원되는 변환 기능에 대한 자세한 내용은 Babel 문서를 참고한다.
React Native에서 활성화된 전체 변환 목록은 @react-native/babel-preset에서 확인할 수 있다.
| 변환 | 코드 |
|---|---|
| ECMAScript 5 | |
| 예약어 | |
| ECMAScript 2015 (ES6) | |
| 화살표 함수 | |
| 블록 스코프 | |
| 전개 연산자 | |
| 클래스 | |
| 계산된 속성 | |
| 상수 | |
| 구조 분해 할당 | |
| for…of | |
| 함수 이름 | |
| 리터럴 | |
| 모듈 | |
| 객체 간결 메서드 | |
| 객체 단축 표기법 | |
| 매개변수 | |
| 나머지 매개변수 | |
| 단축 속성 | |
| 스틱키 정규식 | |
| 템플릿 리터럴 | |
| 유니코드 정규식 | |
| 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 to 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.fromArray.prototype.{find, findIndex}Object.assignString.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes