ES6学习

ES6

let:声明变量

  • 块级作用域

  • 不存在变量提升(var存在变量提升

  • 不允许重复声明(var可重复声明但会覆盖掉之前的声明

const:声明只读常量

  • 声明时必须赋值

  • 块级作用域

解构赋值

数组的解构赋值:

允许指定默认值

允许不完全解构

/*不完全解构*/
let [a,[b],c] = [1,[2,3],4];
//a 为 1; b 为 2; c 为 4
​
/*指定默认值*/
let [f = true] = [];
//f 默认为true

对象的解构赋值:

变量必须与属性名相同

允许指定默认值 需为undefined

let {bar, foo} = {foo:'aaa' , bar:'bbb' };
//bar 为 "bbb" ;foo 为 "aaa"
​
/*匹配模式:变量*/
let {foo: baz} = {foo: 'aaa'};
//baz 为 "aaa" ,foo为匹配模式不是变量
​
/*设置有效默认值*/
let {x = 3} = {x: undefined};
let {x = 3} = {};

字符串的解构赋值:

类似数组

具有length属性

let {length : len} = 'hello';

数值和布尔值的解构赋值:

将数值和布尔值转为对象

undefined和null无法转为对象

let {toString: s} = 123;
​
let {toString: s} = true;

函数参数的解构赋值

[[1, 2], [3, 4]].map(([a, b]) => a + b);

可以使用圆括号的情况:赋值语句的非模式部分

模板字符串

反引号:`` 内容中可以直接出现换行符

let str = `<ul>
            <li>张三</li>
           </ul>`;
           
/*字符串拼接*/
let animal = '青蛙';
let str = `${animal}是一种动物!`;
 

箭头函数

this是静态的,始终指向函数声明时所在作用域下的this值

不能作为构造实例化对象

不能使用arguments 变量

/*声明*/
let fn = (a, b) => {
    return a+b;
}
​
/*箭头函数简写*/
//省略小括号,当形参只有一个的时候
let add = n => {
  return n + n;
}
//省略花括号,当代码体只有一条语句的时候,同时需省略return
let pow = (n) => n * n;

rest参数

rest参数必须放到参数最后

function date(...args){
    console.log(args);
}
date('小李','小左','小然');
​
function fn (a, b, ...args){
    console.log(a);
    console.log(b);
    console.log(args);
}
fn(1,2,3,4,5,6,7);

扩展运算符 ...

能将 数组 转换为逗号分隔的 参数序列

迭代器:

 

任何数据结构只要部署了Iterator接口,就可以使用for…of 来遍历.

生成器

特殊的函数

需要调用.next(); 生效

可以使用yield语句(yield 语句将函数分隔)

/*声明*/
function * gen(){
    console.log("aaa");
    yield "bbb";
}
let iterator = gen();
iterator = gen.next();
​

Promise

异步编程的新解决方案,语法上是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。

 

集合Set

set本身实现了iterator接口,可以使用for ... of遍历 以及 【扩展运算符】

/*声明*/
let s = new Set();
let s2 = new Set(["Raven","Libra","Adjudicator","King","miHoYo"]);
​
//元素个数
let size = s2.size;
//增加元素
s2.add("Rose");
//删除元素
s2.delete("miHoYo");
//检测元素
s2.has("Yoimiya");   //不存在则返回值为false,存在则返回true
//清空集合
s.clear();
​
​
//for ... of遍历
for(let v of s2){
    console.log(v);
}

Map

Map本身实现了iterator接口,可以使用for ... of遍历 以及 【扩展运算符】

类似于对象,是键值对的集合,"键"不局限于字符串。

/*声明*/
let m = new Map();
​
//添加键值对
m.set("key", value);
//Map大小
m.size;
//获取
m.get("key");

Class类(类比JavaScript和Java, 就不再写了)

数值扩展

  • Numbe.ESPILON 是JavaScript表示的最小精度 ,值接近于 2.220446E-16

  • 进制 :0b(二进制) 0o(八进制) 0x(十六进制)

  • Number.isFinite 检测是否为有限数

  • Number.parseInt Number.parseFloat 字符串转数字

  • Math.trunc 抹掉小数

  • Math.sign 判断正数(1)、负数(-1)、0(0)

对象方法扩展

  • Object.is (a,b) 判断两个值是否完全相等

  • Object.assign(a,b) 对象的合并,且后者b会覆盖前者a相同属性部分

  • Object.setPrototypeOf(a,b) Object.getPrototypeOf 设置/获取a原型对象b

模块化

  • export 规定模块的对外接口

  • import 输入其他模块提供的功能

//m1.js  分别暴露
export let school = "nxx";
//m.html
​
<script type = "module">
    //通用引入方法
    import * as m1 from "./m1.js";
    //解构赋值形式
    import {school} from "./m1.js";
    //import {default as m3} from "./m3.js";
    //简便形式  针对默认包里
    import m3 from "./m3.js";
</script>
//m2.js  统一暴露
let school = 'PAX';
function fn(){
    console.log("PAX!!!");
}
​
export {school,fn}
//m3.js   默认暴露
​
export default{
    school : "Temis";
}

ES8 新特性 async await

async

async function fn(){
    //返回一个字符串或者返回的结果不死一个Promise对象,那么返回的结果就是成功的Promise对象
    return ;
    //抛出错误,返回的结果是一个失败的Promise对象
    throw new Error("出错了");
    //返回的结果是一个Promise对象
    return new Promise((resolve, reject)=>{
        //成功
        resolve("成功");
        //失败
        reject("失败");
    });
}

await 必须要放在async函数中,返回的位promise成功的值,失败需要用try-catch捕获异常

let p = new Promise((resolve,reject)=>{
    resolve("恭喜!");
});
async function fn(){
    try{
        let result = await p;
    }catch(e){
        consloe.log(e);
    }
​
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值