Skip to content

Latest commit

 

History

History
372 lines (357 loc) · 11.5 KB

javascript-environment.md

File metadata and controls

372 lines (357 loc) · 11.5 KB

Ambiente JavaScript

Tempo de execução JavaScript

Ao usar React Native, você executará seu código JavaScript em até três ambientes:

  • Na maioria dos casos, o React Native usará o Hermes, um mecanismo JavaScript de código aberto otimizado para o React Native.
  • Se o Hermes estiver desativado, o React Native usará JavaScriptCore, o mecanismo JavaScript que alimenta o Safari. Observe que no iOS, JavaScriptCore não usa JIT devido à ausência de memória executável gravável em aplicativos iOS.
  • Ao usar a depuração do Chrome, todo o código JavaScript é executado no próprio Chrome, comunicando-se com o código nativo por meio de WebSockets. O Chrome usa V8 como mecanismo JavaScript.

Embora esses ambientes sejam muito semelhantes, você pode acabar encontrando algumas inconsistências. É melhor evitar depender de especificações de qualquer tempo de execução.

Transformadores de sintaxe JavaScript

Os transformadores de sintaxe tornam a escrita de código mais agradável, permitindo que você use a nova sintaxe JavaScript sem ter que esperar pelo suporte de todos os interpretadores.

O React Native vem com o compilador Babel JavaScript. Verifique a documentação do Babel sobre suas transformações suportadas para obter mais detalhes.

Uma lista completa das transformações habilitadas para React Native pode ser encontrada em @react-native/babel-preset.

TRANSFORMAÇÃO CÓDIGO
ECMAScript 5
Palavras reservadas promise.catch(function() {...});
ECMAScript 2015 (ES6)
Arrow functions this.setState({pressed: true})} />
Block scoping `let greeting = 'hi';`
Call spread `Math.max(...array);`
Classes class C extends React.Component {render() { return ; }}
Computed Properties const key = 'abc'; const obj = {[key]: 10};
Constants const answer = 42;
Destructuring const {isActive, style} = this.props;
for…of for (var num of [1, 2, 3]) {...};
Function Name let number = x => x;
Literals const b = 0b11; const o = 0o7; const u = 'Hello\u{000A}\u{0009}!';
Modules import React, {Component} from 'react';
Object Concise Method const obj = {method() { return 10; }};
Object Short Notation const name = 'vjeux'; const obj = {name};
Parameters function test(x = 'hello', {a, b}, ...args) {}
Rest Params function(type, ...args) {};
Shorthand Properties const o = {a, b, c};
Sticky Regex const a = /o+/y;
Template Literals const who = 'world'; const str = `Hello ${who}`;
Unicode Regex const string = 'foo💩bar'; const match = string.match(/foo(.)bar/u);
ECMAScript 2016 (ES7)
Exponentiation Operator let x = 10 ** 2;
ECMAScript 2017 (ES8)
Async Functions async function doStuffAsync() {const foo = await doOtherStuffAsync();};
Function Trailing Comma function f(a, b, c,) {};
ECMAScript 2018 (ES9)
Object Spread const extended = {...obj, a: 10};
ECMAScript 2019 (ES10)
Optional Catch Binding try {throw 0; } catch { doSomethingWhichDoesNotCareAboutTheValueThrown();}
ECMAScript 2020 (ES11)
Dynamic Imports const package = await import('package'); package.function()
Nullish Coalescing Operator const foo = object.foo ?? 'default';
Optional Chaining const name = obj.user?.name;
ECMAScript 2022 (ES13)
Class Fields class Bork {static a = 'foo'; static b; x = 'bar'; y;}
Proposta da etapa 1
Export Default From export v from 'mod';
Diversos
Babel Template template(`const %%importName%% = require(%%source%%);`);
Flow function foo(x: ?number): string {};
ESM to CJS export default 42;
JSX
Object Assign Object.assign(a, b);
React Display Name const bar = createReactClass({});
TypeScript function foo(x: {hello: true, target: 'react native!'}): string {};

Polifills

Muitas funções padrão também estão disponíveis em todos os tempos de execução JavaScript suportados.

Navegador

ECMAScript 2015 (ES6)

ECMAScript 2016 (ES7)

ECMAScript 2017 (ES8)

Específico

  • __DEV__