es6学习(五)

本文详细介绍了ES6的多个核心特性,包括let和const声明变量、解构赋值、模板字符串、箭头函数、Promise、Set和Map等。通过实例展示了如何在实际编程中使用这些特性,如利用箭头函数实现异步编程,用Promise解决回调地狱问题,以及Set和Map在数据管理中的应用。此外,还探讨了类(class)、迭代器和生成器的概念和用法,以及模块化的导入导出机制。
摘要由CSDN通过智能技术生成

es6学习

1. es6新特性
1.1 let 声明变量:

  • 不能重复声明,var可以重复声明
  • 块级作用域{}      作用域:函数、全局、块级(es6新出的)、eval(严格模式下)
  • 不存在变量提升。var存在变量提升。
  • 不影响作用域链。(会向上一级作用域中去寻找)

下面的案例,用var会报错。因为var是函数作用域。因此,其实只定义了一个i,而let是块级作用域,定义了三个i

 1.2 const 声明常量

  • 一定要赋初值。
  • 一般常量使用大写
  • 常量的值不能修改
  • 块级作用域
  • 对于数组和对象的元素修改,不算对常量的修改,不会报错。因为进行修改时,数组和对象的地址没有变化。

1.3 变量解构赋值。

数组[   ]

对象{    }   ,要与对象的属性名和方法名对应

1.4  模板字符串

`   `

  • 内容中可以直接出现换行符
  • 可以进行变量的拼接。

1.5 对象的简化写法

 等价于:

name: name,

change: change,

improve: function(){...}   使用上述方式更简单了。

1.6 箭头函数

  • this是静态的,this始终指向函数声明变量时所在作用域下的ths值。不会改变
  • 不能作为构造函数
  • 不能使用arguments 变量
  • 简写:形参只有一个变量时,可以省略小括号。代码体只有一条语句时,可以省略花括号,return,并且语句的执行结果就是函数的返回值。

1.7  es6允许给函数参数赋初始值

(1)一般位置要靠后(潜规则)

 (2)可以与解构赋值结合使用。

 1.8  es6  rest参数  

rest参数放在函数的形参位置,用来接收多余的参数,并变为一个数组。

es6中引入rest参数,用于获取函数的实参,用来代替arguments

arguments是一个伪数组,而...args是一个真正的数组,可以使用Array的一些方法。

1.9 扩展运算符的使用   ...args

而扩展运算符不是放在形参的位置。可以将数组转化为逗号分隔的参数序列。

注意与rest参数的区别。

 应用:

(1)数组的合并

 (2)数组的克隆

如果数组中有引用对象的话,是浅拷贝。

 (3)将伪数组转变为真正的数组。

 1.10  Symbol基本使用

 

(1)symbol()和symbol.for()创建

 

 (2)不能与其他数据进行类算。

    七种数据类型

 (3)symbol的应用

给对象添加属性和方法,表示独一无二的。

①给对象添加方法:法一:

法二:

 ② Symbol的内置属性

  • Symbol.hasInstance

  • Symbol.isConcatSpreadable

 Symbol的内置属性主要是控制对象在特定场景下的表现:比如:数组不可以展开,

 1.11 迭代器

1.11.1 什么是迭代器

 这里的Interator接口,相当于一个属性:Symbol(Symbol.iterator)

1.11.2 迭代器工作原理

for  of  返回的是value值, for  in返回的是key值。 

1.11.3 自定义迭代数据

<script>
        const banji = {
            name:'终极一班',
            stus: ['xiaoming', 'huahau', 'xiaohong', 'hanhan'],
            [Symbol.iterator](){
                // 索隐变量
                let index = 0;
                let _this = this;
                let s = {
                    next: function() {
                        if(index < _this.stus.length) {
                            const result =  {value: _this.stus[index], done:false};
                            index++;
                            return result;
                        } else {
                            return {value: undefined, done:true};
                        }
                        
                    }
                }
            }
        };
        for(let v of banji) {
            console.log(v);
        }
    </script>

1.12 生成器 

生成器是一个特殊的函数。

不能直接调用函数,而是要调用函数的next方法。

yield: 函数代码的分隔符

 生成器函数传递参数,作为yield语句的返回结果。

 案例1: 使用生成器实现异步编程

法一:回调函数太多

 法二:使用生成器函数。

 案例二:获取用户的信息、订单、商品信息

 1.13 Promise:es6中引入的异步编程的解决方案

1.13.1 了解Pomise

Promise构造函数中有两个参数:resolve, reject分别表示成功和失败。执行完构造函数中的数据,再执行.then()同样有两个参数,都是函数,一个函数时成功时执行的函数,一个是失败时执行的函数。

 1.13.2 了解then函数。

调用then方法:then方法的返回结果是Promise对象,对象状态有回调函数的执行结果决定。

(1)如果回调函数中返回的结果是非promise类型的属性,状态为成功,返回值为对象的成功的值。

(2)如果回调函数中返回的结果是promise类型的属性,则内部返回的promise的状态就决定了then方法返回的promise对象的状态。

(3)抛出错误的话,也是一个失败的值。

因此,promise是可以链式调用的。.then().then()....

p.catch(function(){})  语法糖:只写出错的结果

1.14 Set集合

1.14.1 了解基本语法

1.14.2  案例:

1.15 Map 键值对的集合。

 1.15.1 基本用法

 1.16  class类

(1)用class创建对象

es5  函数对象

es6 用calss创建对象 

 (2)class中的静态成员

静态成员属于函数对象(es5)、类(es6),不属于实例对象

注意es5和es6的区别

 (3)用构造函数实现继承

es5中的继承

 

 es6中的继承

 (4)子类对父类方法的重写

直接写一个重名方法即可。

(5)class中的get和set

get 属性(){}

set 属性(value){}

可以直接设置和得到属性的值

1.17 数值扩展

 

 

    false

 

 

1.18 对象方法的扩展

 

 assign:浅拷贝的语法糖

 1.19 模块化

(1)数据的暴露方式

分别暴露: 在暴露数据前加export

统一暴露:export{变量名。。。}

默认暴露:

(2)引入方式

通用的导入方式:import  * from  “js”

解构赋值形式:import  {变量名} from  “js”;如果重名了,要起别名:as    

                           默认暴露时,可以import  {default as 。。。} from  “js”:必须起变量名

简便形式引入:只针对默认暴露:import  m3  from “js”

(3)浏览器使用es6模块化:

  • 可以直接在html中引入: script中写上述引入的方式。
  • 新建一个js文件,在js文件中写上述引入的方式。然后在html中引入js文件

(4)  使用babel对es6模块进行引入

 (5)es6模块化与npm包的结合使用。

import 变量名 from  “模块名”

引入以后,要重新打包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值