JavaScript Environment
JavaScript Environment
JavaScript运行时
使用React Native时,您将在两种环境中运行JavaScript代码:
- 在iOS模拟器和设备上,Android模拟器和设备React Native使用JavaScriptCore,它是支持Safari的JavaScript引擎。在iOS上由于iOS应用程序中缺少可写的可执行内存,JSC不使用JIT。
- 使用Chrome调试时,它会在Chrome本身内运行所有JavaScript代码,并通过WebSocket与本机代码进行通信。所以你正在使用V8。
虽然这两种环境非常相似,但最终可能会遇到一些不一致之处。我们很可能会在未来尝试其他JS引擎,所以最好避免依赖任何运行时的细节。
JavaScript语法变形金刚
语法转换器使编写代码更加愉快,让您可以使用新的JavaScript语法,而无需等待所有解释器的支持。
从版本0.5.0开始,React Native随附Babel JavaScript编译器。查看Babel关于其支持的转换的文档以获取更多详细信息。
以下是React Native已启用转换的完整列表。
ES5
- 保留字:
promise.catch(function() { }ES
6
- Arrow functions: <C onPress={() => this.setState{pressed: true})}
- Block scoping:
let greeting = 'hi';
- Call spread:
Math.max(...array
- Classes: class C extends React.Component { render() { return <View />; } }
- Constants:
const answer = 42;
- Destructuring:
var {isActive, style} = this.props;
- for...of:
for (var num of [1, 2, 3]) {}
- Modules:
import React, { Component } from 'react';
- Computed Properties:
var key = 'abc'; var obj = {[key]: 10};
- Object Concise Method:
var obj = { method() { return 10; } };
- Object Short Notation:
var name = 'vjeux'; var obj = { name };
- Rest Params:
function(type, ...args) { }
- Template Literals:
var who = 'world'; var str = `Hello ${who}`;
ES7
- Object Spread:
var extended = { ...obj, a: 10 };
- Function Trailing Comma:
function f(a, b, c,) { }
- Async Functions:
async function doStuffAsync() { const foo = await doOtherStuffAsync( };
Specific
- JSX: <View style={{color: 'red'}} />
- Flow:
function foo(x: ?number): string {}
Polyfills
许多标准函数也可用于所有支持的JavaScript运行时。
浏览器
- XMLHttpRequest, fetch
- {set,clear} {Timeout,Interval,Immediate},{request,cancel} AnimationFrame
- navigator.geolocation
ES6
- String.prototype.{startsWith, endsWith, repeat, includes}
ES7
__DEV__