02基础语法--003--语法基础

2020-08-26  本文已影响0人  修_远

[TOC]

JSX语法

let 和 const 命令

let 声明的变量只在 let 命令所在的代码块内有效

{
    let a = 10;
    var b = 1;
}

a   // ReferenceError
b   // 1

let 声明的变量不允许在相同作用于内重复声明

// 报错
function func() {
    let a = 10;
    var a = 1;
}
// 报错
function func() {
    let a = 10;
    let a = 1;
}

const 用于声明一个只读的常量,一旦声明,常量的值就不能改变

const PI = 3.14159;

PI = 3; // 报错

ES6之后添加了对类的支持,引入了 class 关键字。让对象的创建和继承更加直观,也让父类方法的调用、实例化、静态方法和构造函数等更加具体。

继承

class App extends Component {
    ...
}

方法定义

  • 可以直接使用函数名来定义方法
  • 方法结尾不需要使用逗号
class App extends Component {
    componentWillMount() {}
}

属性类型和默认属性

  • ES5:使用 propTypes 和 getDefaultProps() 实现
  • ES6:统一使用 static 修饰
class App extends React.Component {
    static defaultProps = {
        autoPlay: false};
    static propTypes = {
        autoPlay: React.PropTypes.bool.isRequired};        
    ...
}

箭头函数

主要用来简化函数的书写

一般格式

var f = v => v;
// 等价于
var f = function(v) {
    return v;
};

参数:使用圆括号代表参数部分

var f = () => 5;
// 等价于
var f = function () {
    return 5;
};
var f = (a, b) => a+b;
// 等价于
var f = function (a, b) {
    return a+b;
};

函数体:多条语句,使用大括号

var add = (a, b) => {
    if (typeof a == 'number' && typeof b == 'number') {
        return a+b;
    } else {
        return 0;
    }
}

【注意事项】

模块

export 和 import

例子:a.js 文件

var sex = "boy";
var echo = function(value) {
    console.log(value);
}
// 导出 sex 变量 和 echo 函数
export {sex, echo}

引用 a.js 文件

import {sex, echo} from "./a.js"
console.log(sex);
// 等价于
echo(sex)

export 和 import 的对应关系

export {sex, echo}
import {sex, echo} from "./a.js"

模块之间的继承,circleplus 模块继承自 circle 模块

export * from 'circle';
export var e = 2.71828182846;
export default function(x) {
    return Map.exp(x);
}

Promise 对象

Promise 的理解

Promise 的构建

const promise = new Promise(function(resolve, reject) {
    // 模拟网络请求成功和失败之后的处理
    if (success) {  
        resolve(value);
    } else {
        reject(error);
    }
}

Promise 的使用

Promise 可以通过 then() 方法将 resolved状态rejected状态 指定回调函数

promise.then(function(value) {
    // 成功
    }, function(error) {
    // 失败
});

async 函数

async 的理解

async 的格式

async function foo() {}
var bar = async function() {}
var obj = { async bazfunction() {} }
avr fot = async() => {}

async 的返回:Promise对象,使用 then()catch() 处理回调结果

// 声明 getStockPriceByName 函数
async function getStockPriceByName(name) {
    let symbol = await getStockSymbol(name);
    let price  = await getPriceByName(name);
    return price;
}

// 使用 getStockPriceByName 函数,在 then 和 catch 中处理结果
getStockPriceByName('goog').then( (result) => {
    console.log(result);
}).catch((err)=> {
    console.log(err);
})

await 的返回

  • 后面跟 Promise对象:Promise对象完成之后返回
  • 后面非 Promise对象:直接返回
  • 后面跟 thenable对象:当做Promise对象处理
async function f() {
    return await 123;
}
f().then(v => console.log(v));  // 直接返回 v 的数值
class Sleep(timeout) {
    constructor(timeout) {
        this.timeout = timeout;
    }
    then(resolve, reject) {...}
}
(async () => {
    const acturalTime = await new Sleep(1000);
    console.log(acturalTime);
})();

await后面不是 Promise对象也不是一个数值,但是Sleep对象中有实现 then 方法,所以也会将 Sleep对象当做一个 Promise对象来处理。Sleep对象 + then方法 => Promise对象

拦截 reject事件

如果希望某个异步操作失败后不会中断后面的操作,需要拦截这些异常,不让它抛出到reject

async function myFunction() {
    try {
        await somethingThatReturnsAPromise();
    } catch (err) {
        console.log(err);
    }
}
async function myFunction() {
    await somethingThatReturnsAPromise().catch((err) => {
        console.log(err);
    });
}

Promise.all():异步并行

let foo = await getFoo();
let far = await getFar();
let [foo, far] = await Promise.all([getFoo(), getFar()]);
上一篇下一篇

猜你喜欢

热点阅读