LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 概述
  • 语法
  • let和const命令
  • 模板字符串
  • 函数默认参数与箭头函数
  • 对象初始化简写
  • 对象结构
  • 传播操作符
  • 数组map和reduce方法使用

这有帮助吗?

在GitHub上编辑
  1. 前端编程

02-ES6详解

上一页01 Node JS下一页03-NPM详解

最后更新于3年前

这有帮助吗?

概述

img

ECMAScript的快速发展:

编程语言JavaScript是ECMAScript的实现和扩展 。ECMAScript是由ECMA(一个类似W3C的标准组织)参与进行标准化的语法规范。ECMAScript定义了:

  • [语言语法] – 语法解析规则、关键字、语句、声明、运算符等。

  • [类型]– 布尔型、数字、字符串、对象等。

  • [原型和继承]

  • 内建对象和函数的

  • [标准库] – [JSON]、[Math]、[数组方法]、[对象自省方法]等。

​ ECMAScript标准不定义HTML或CSS的相关功能,也不定义类似DOM(文档对象模型)的[Web API],这些都在独立的标准中进行定义。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似[node.js]的非浏览器环境。

​ ECMAScript标准的历史版本分别是1、2、3、5。

​ 那么为什么没有第4版?其实,在过去确实曾计划发布提出巨量新特性的第4版,但最终却因想法太过激进而惨遭废除(这一版标准中曾经有一个极其复杂的支持泛型和类型推断的内建静态类型系统)。

​ ES4饱受争议,当标准委员会最终停止开发ES4时,其成员同意发布一个相对谦和的ES5版本,随后继续制定一些更具实质性的新特性。这一明确的协商协议最终命名为“Harmony”,因此,ES5规范中包含这样两句话

​ ECMAScript是一门充满活力的语言,并在不断进化中。未来版本的规范中将持续进行重要的技术改进2009年发布的改进版本ES5,引入了[Object.create()]、[Object.defineProperty()]、[getters]和[setters]、[严格模式]以及[JSON]对象。

​ ES6: 是JavaScript语言的下一代标准,2015年6月正式发布。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

语法

let和const命令

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 传统定义变量和常量的方式 统一使用var
        var name = "baidu"
        var link = "https://www.baidu.com"
        var PI = Math.PI

        console.log(name)
        console.log(link)
        console.log(PI)

        // ES6 的定义
        let name2 = "python"
        let link2 = "https://www.python.org"

        // 定义常量
        const PI2 = Math.PI

        console.log(name2)
        console.log(link2)
        console.log(PI2)
    </script>
</body>
</html>
  • var的变量穿透问题

<!DOCTYPE html>
<html lang="en">
    ...
<body>
    <script>
        // var 的变量穿透问题
        for(var i=0;i<5;i++)
            console.log(i)

        // 这里就造成变量穿透、编译
        console.log(i)
    </script>
</body>
</html>

通过使用let进行解决

<!DOCTYPE html>
<html lang="en">
	...
<body>
    <script>
        for(let i=0;i<5;i++)
            console.log(i)
        console.log(i)
    </script>
</body>
</html>

​ 在实际开发和生产中,如果是小程序,uniapp或者一些脚手架中的,可以大胆的去使用let和const但是如果你是web开发。建议大家还是使用var,因为在一些低版本的浏览器还是不支持let和const。

模板字符串

以前: 我们都是使用 ‘’ 或者 “” 来把字符串套起来

现在: `` 【反引号】

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    <script>
        // 字符串会牵涉到动态部分

        var person = {
            name:"1",
            address:"2",
            link:"3"
        }

        let address = person.name + ":" + person.address + ":" + person.link
        console.log(address)

        // ES6字符串语法模板
        let address2 = `${person.name}:${person.address}:${person.link}`
        console.log(address2)

    </script>
</body>
</html>

函数默认参数与箭头函数

函数默认参数

<script>
    // 函数默认参数
    function sum(a,b){
        return a+b
    }

    var result = sum(1,2)
    console.log(result)
</script>
<script>
    // 函数默认参数
    function sum(a=2,b=3){
        return a+b
    }


    var result = sum()
    console.log(result)
</script>

箭头函数

箭头函数简化函数的定义,可以让我们不用使用function关键字。箭头函数最直观的三个特点:

  1. 不需要function关键字来创建函数

  2. 省略return关键字

  3. 继承当前上下文的 this 关键字

<script>
    var sum = function(a,b){
        return a+b
    }

    var sum2 = (a,b) => {
        return a+b
    }

    var sum3 = (a,b) => a+b
    
	 console.log(sum(1,2)+":"+sum2(1,2)+":"+sum3(1,2))
</script>

但是如果有逻辑体,就不能省略return,例如:

var sum = (a,b) => {
    var num = a + b
    return num
}

如果参数只有一个,括号也可以省略掉,例如:

<script>
    var arr = [1,2,3,4,5]
    var newarr = arr.map(obj=>obj * 2)
    console.log(newarr)
</script>

对象初始化简写

<script>
    var info = {
        title:"python",
        link:"https://www.python.org",
        go:function(){
            console.log(`正在学习${this.title}`)
        }
    }

    //es6简写
    //因为对象是以key-value的形式存在
    //1. 如果key和变量名字一致,可以指定义一次即可
    //2. 如果value是一个函数,可以把`:function`去掉,只剩下()即可
    var title = "python"
    var link = "https://www.python.org"
    var info2 = {
        title:title,
        link:link,
        go:function(){
            console.log(`正在学习${this.title}`)
        }
    }

    var info3 = {
        title,
        link,
        go(){
            console.log(`正在学习${this.title}`)
        }
    }

    console.log(info)
    console.log(info2)
    console.log(info3)



</script>

对象结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>对象解构</title>
</head>
<body>
    <script>
        // 对象解构 --- es6提供一些获取快捷获取对象属性和行为方式
        var person = {
            name:'zhangsan',
            age:32,
            language:"cn",
            // 函数也有处理
            /* say:function(){
                console.log(this.name+"年龄是:" + this.age);
            }   */
            /* say:()=>{
                console.log(this.name+"年龄是:" + this.age);
            }  */
            say(){
                console.log(this.name+"年龄是:" + this.age);
            } 
        };
        // ===========================传统的做法========================
        var name = person.name;
        var age = person.age;
        person.say();
        // ===========================对象解构做法========================
        //es6的做法 前提:默认情况name,age必须是jsonkey.
        var {name,age} = person;
        console.log(name,age);
        // 可以用冒号取小名
        var {name,age,language:lan} = person;
        console.log(name,age,lan);
    </script>
</body>
</html>

传播操作符

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 对象传播操作符
        var info = {
            title:"title",
            link:"link",
            address:"address",
            go:function(){
                console.log(`${this.title},${this.link}`)
            }
        }

        var {title, link,...person2} = info
        console.log(title)
        console.log(link)
        console.log(person2)


    </script>
</body>
</html>

从对象中进行取值,取值的名字需要与对象中的名字一致;当对对象进行取值时,如果剩下还有值,可以通过...xxx进行获取,如...person2。

数组map和reduce方法使用

map

方法可以将原数组中的所有元素通过一个函数进行处理并放入到一个新数组中并返回该新数组。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 要对数组每个元素*2
        let arr = [1,2,3,4,5,6,7]

        // 传统的方式
        let newarr = arr.map(function(value){
            return parseInt(value) * 2;
        })
      
        // 传统的方式
        let newarr2 = arr.map(value=>{
            return parseInt(value) * 2;
        })
      
        // 传统的方式
        let newarr3 = arr.map(value=>parseInt(value) * 2)

        console.log(newarr)
        console.log(newarr2)
        console.log(newarr3)
   
    </script>
</body>
</html>

reduce

reduce(function(),初始值(可选)) :

接收一个函数(必须)和一个初始值(可选),该函数接收两个参数:

  • 第一个参数是上一次reduce处理的结果

  • 第二个参数是数组中要处理的下一个元素 reduce() 会从左到右依次把数组中的元素用reduce处理,并把处理的结果作为下次reduce的第一个参数。如果是 第一次,会把前两个元素作为计算参数,或者把用户指定的初始值作为起始参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let arr = [1,2,3,4,5]
        var result = arr.reduce((a,b) => a+b) # result=15
        console.log(result)
    </script>
</body>
</html>
img
image-20210918140827424
image-20210918141334786
image-20210918141426018
img
image-20210918142242865
image-20210918142553044
image-20210918142652165
image-20210918143324677
image-20210918143747291
image-20210918144547069
image-20210918222721685