learn ES6 from freecodecamp

1.var & let

var声明的变量只有全局变量和函数内变量两种区别;

let声明的变量是块级作用域,在循环、条件语句等外部无法访问;

let不允许重复声明,var可以重复声明,容易产生问题;

2.const

对象(包括数组和函数)在使用 const 声明的时候依然是可变的。 使用 const 来声明只会保证变量不会被重新赋值。

const变量名注意字符全部大写;

3.防止对象被改变

Object.freeze(obj);

4.省略函数体的匿名函数

        const fun = () =>{函数体};

        fun();

函数体只有return语句的情况下可以省略return:

        const fun = (a, b) => a*b;

给参数设置默认值:

         const fun = (a = 1, b) => a*b;

5.操作符之‘...’

一、省略参数,就不需要查看 args 数组,并且允许我们在参数数组上使用 map()filter() 和 reduce()

const sum = (...args) => {
  return args.reduce((a, b) => a + b, 0);
}

二、展开数组,只能够在函数的参数中或者数组中使用

简言之,去掉数组的中括号,变成以逗号分隔的一个个数据

const arr1 = ['JAN', 'FEB', 'MAR', 'APR', 'MAY'];
let arr2;

arr2 = [...arr1];

6.解构赋值

const obj={name: 'Amy', age: 18}

一、const {name, age} = obj作用等同于分别将const name=obj.name; const age = obj.age;

二、变量名和属性名不一致时,userName为新变量名

const {name: userName, age: userAge} = obj

三、嵌套对象的解构

const obj = {A:{name: 'Amy', age: 18}}

const {A: {name: userName, age: userAge} } = obj

四、数组解构

const [a, b,,, c] = [1, 2, 3, 4, 5, 6];
console.log(a, b, c);// 1 2 5
//依次赋值,少变量的情况下,多余数组值舍去

//简单交换两个值
[a, b] = [b, a]

//list是一个数组,结合...操作符取排除前两个元素的list
const [, , ...arr] = list;

五、函数参数的解构

obj = {name: 'a', age: 18}

const fun = ({name, age}) => 'name is ' + name + ', age is ' + age;

7.字符串模板的应用

反引号、变量放在 ${变量名} 中,不需要打断语句:

let str = `My name is ${userName}.I'm ${age} years old.`

8.简化的对象

{a, b, c}和{a:a, b:b, c:c}等价

9.对象中简化的函数定义

learn ES6 from freecodecamp_第1张图片

 10.class关键字,类名首字母大写,后续驼峰

learn ES6 from freecodecamp_第2张图片

11.getter和setter,,,,注意私有变量以下划线开始命名(建议)

函数名相同,使用方式和变量一样

//getter
get name(){
    return this._name
}
//setter
set name(name){
    this._name = name
}
//use
obj.name = 'Jo'
userName = obj.name

12.模块脚本的使用,类似C++ 的库函数

13.使用export和import来重用函数

//在需要导出的函数的js文件中
export { 函数名1, 函数名2}

//在引用函数的js文件中
import {函数名1, 函数名2} from '源js文件所在目录以及文件名'

//全部导入
import * as stringFunctions from "./string_functions.js";
//使用
stringFunctions.func1()
stringFunctions.func2()

14.export default

还需要了解另外一种被称为默认导出的 export 的语法。 在文件中只有一个值需要导出的时候,通常会使用这种语法。 它也常常用于给文件或者模块创建返回值。

就是给函数前加上export default,每个文件只能有一个export default

export default function subtract(x, y) {
  return x - y;
}

默认导出的导入,无需花括号,变量名不用相同

import sub from "./math_functions.js";

15.promise

Promise 有三个状态:pendingfulfilled 和 rejected。 上一个挑战里创建的 promise 一直阻塞在 pending 状态里,因为没有调用 promise 的完成方法。 Promise 提供的 resolve 和 reject 参数就是用来结束 promise 的。 Promise 成功时调用 resolve,promise 执行失败时调用 reject, 如下文所述,这些方法需要有一个参数。

const myPromise = new Promise((resolve, reject) => {
  if(condition here) {
    resolve("Promise was fulfilled");
  } else {
    reject("Promise was rejected");
  }
});

上面的示例使用字符串作为这些函数的参数,但参数实际上可以是任何格式。 通常,它可能是一个包含数据的对象,你可以将它放在网站或其他地方。

const makeServerRequest = new Promise((resolve, reject) => {
  // responseFromServer 设置为 false,表示从服务器获得无效响应
  let responseFromServer = false;

  if(responseFromServer) {
    resolve("We got the data");
  } else {  
    reject("Data not received");
  }
});

//resole结束时会调用then
makeServerRequest.then(result => {
  console.log(result);
});

//reject会调用catch
makeServerRequest.catch(error => {
  console.log(error);
});

你可能感兴趣的:(web前端,javascript,es6,前端)