ES6学习笔记

模板字面量(template literal)是允许嵌入表达式的字符串字面量:"${ninja}“

 

块级作用域变量:

使用新的let关键字创建块级作用域变量:let ninja = "Yoshi";

使用新的const关键字创建块级作用域常量,常量在创建后不能被重新赋值:const ninja = "Yoshi"

 

 

函数参数:

 

剩余参数(rest parameter) 可以将未命中形参的参数创建为一个不定数量的数组。

 

function muliMax(first, ...remaining) {.....}

 

muliMax(2,3,4,5);//first:2; remaining:[3, 4, 5]

 

函数默认参数(default parameter)允许在调用时没有值或undefined被传入时使用指定的默认参数值。

 

function do(ninja, action="skulk") {

return ninja + " " + action;

}

 

do("Fuma");//“Fuma skulk”

 

扩展语法(spread operator)允许一个表达式在期望多个参数(用于函数调用)或多个元素(用于数组字面量)或多个变量(用于解构赋值)的位置扩展:[...item,3,4,5]

 

 

箭头函数(arrow function)可以创建语法更为简洁的函数。箭头函数不会创建自己的this参数,相反,它将继承使用执行上下文的this值:

 

const values = [0, 3, 2, 5, 7, 4, 8, 1];

values.sort((v1,v2)=> v1 - v2); /*OR*/ values.sort((v1, v2) => {return v1 - v2});

values.forEach(value=> console.log(value));

 

 

生成器(generator)函数能生成一组值的序列,但每个值的生成是基于每次请求,并不同于标准按函数那样立即生成。每当生成器函数生成了一个值,它都会暂停执行但不会阻塞后续代码的执行,使用yield来生成一个新值:

 

function *IdGenerator() {

let id = 0;

while(true) {

yield ++id;

}

}

 

promise对象是我们现在尚未得到但将来会得到值的占位符。它是对我们最终能够得知异步计算结果的一种保证。promise既可以成功也可以失败,并且一旦设定好了,就不能有更多改变。

通过调用传入的resolve函数,一个promise就被成功兑现(resolve)(通过调用reject则promise被违背)。拒绝一个promise有两种方式:显示拒绝,即在一个promise的执行函数中调用传入的reject方法;隐式拒绝,如果正在处理一个promise的过程中跑出了一个异常。

 

1.使用new Promise((resolve, reject) => {});创建一个新的Promise对象。

2.调用resolve函数显示地兑现一个promise。调用reject函数显示地拒绝一个promise。如果在处理过程中发生异常则会隐式的拒绝promise。

3.一个promise对象拥有then方法,它接收两个回调函数(一个成功回调和一个失败回调)作为参数返回一个promise:

 

myPromise.then(val => console.log("Success"), err=> console.log("error"));

 

4.链式调用catch方法可以捕获promise的失败异常;myPromise.catch(e => alert(e));

 

 

类(Class)是JavaScript的语法糖:

class Person {

constructor(name) {

this.name = name;

}

 

dance(){

return true;

}

}

 

 

class Ninja extends Person {

constructor(name, level) {

super(name);

this.level = level;

}

static compare(ninja1, ninja2) {

return ninja1.level - ninja2.level;

}

}

 

 

代理(Proxy)可对对象的访问进行控制。当与对象交互时(当获取 对象的属性或调用函数时),可以执行自定义操作。

 

const p = new Proxy(target, {

get:(target, key) => {/* called when property accessed through proxy*/}

set:(target, key, value) => {/* called when property set through proxy*/}

});

 

 

映射(Map)是键与值之间的映射关系:

1.通过new Map()创建一个新的映射。

2.使用set方法添加新映射,get方法获取映射,has方法检测映射是否存在,delete方法删除映射。

 

集合(Set)是一组非重复成员的集合:

通过new Set()创建一个新的集合。

使用add方法添加成员,delete方法删除成员,size属性获取结合中成员的个数。

 

for ...of循环遍历结合或生成器。

 

对象与数组的解构(destructuring):

 

1.const {name: ninjaName} = ninja;

2.const [firstNinja] = ["Yoshi"];

 

模块(Module)是更大的代码组织单元,可以将程序划分为若干个小片段:

export class Ninja{};//导出Ninja类

export default class Ninja{}//使用默认带出

export {ninja};//导出存在的变量

export {ninja as samurai};//导出是进行重命名

 

 

improt Ninja from "Ninja.js";//导入默认值

import {ninja} from "Ninja.js";导入单个导出

import * as Ninja from "Ninja.js";导入整个模块内容

import {ninja as iNinja} from "Ninja.js";//导入时重命名单个导出

 

 

 

 

 

 

 

你可能感兴趣的:(Web前端,javascript,深入理解JavaScript)