浅谈ES6初级语法以及使用

简介: 基础ES6介绍

前言


ES6(ECMAScript6)是于2015年6月正式发布的 JavaScript 语言的标准,而不是你现在在搜索引擎中搜出来的蔚来 ES6 汽车型号。相信对于所有前端开发者来说已经很熟悉了,ES6 的内容非常多,本文就不一一介绍了。我将主要介绍一些在前端开发中使用到的 ES6 初级语法,本文针对初级前端开发,大佬们可以略过。如果发现文中有不准确的地方欢迎各位指出,同时也欢迎在评论区探讨。那话不多说,我们开始。

let 和 const 命令


let 和 const 大家用的已经很多了,毕竟现在很少看到还有人使用 var 去定义变量。let 和 const 的块级作用域、不存在变量提升、不允许重复声明等特点这里就略过了。下面先来两个思考题,看看两个 for 循环会以怎样的时间间隔在控制到打印出什么值。

let和const金典面试题.png

还有一个暂时性死区的概念,暂时性死区是指在代码块内如果存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,不可以在声明之前使用这些变量

需要注意的是,const 命令声明的复合类型数据(数组和对象)本质上是变量指向的内存地址不能改变,这个指针指向的数据结构是可以改变的。所以我们在声明变量时能用 const 的就一定不使用 let。

let和const.png

解构赋值


解构赋值的使用场景非常多,字符串、数组、对象以及函数的参数都可以进行解构。这里就不过多赘述解构的语法了,下面将直接列举一些案例,文中出现的扩展运算符(...),其实就是取出参数对象中的所有可遍历属性,拷贝到当前对象之中。

数组的解构赋值

数组的结构赋值很简单,你只要在使用时注意一些细节就行。

解构-数组.png

对象的解构赋值

需要注意的是,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量,真正被赋值的是后者,而不是前者。

所以当服务端接口返回的字段名不是我们前端想要的,傲娇的你又不想改自己的代码(或者本身这个字段名你已经在很多地方使用了),那么这个时候就可以使用别名来解构。最后你会看到下图中我们尝试打印 node 也报错了,这也符合对象解构赋值的机制。

解构-对象.png

函数参数的解构赋值

函数参数的解构无非就是把数组或者对象当作函数的参数传入,然后就是跟数组和对象一样是机制进行解构,下面以传入对象为例,同样也可以使用默认值,重命名。

解构-函数的参数.png

字符串的扩展


ES6 中字符串还是新增了很多 API ,比如 includes(), startsWith(), endsWith(),repeat(), padStart(),padEnd() 等,我觉得使用频率都不是很高,你只要知道就行,如果有不清楚的可以自行查阅。那这里我就重点介绍一下模版字符串了。

模版字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

模版字符串.png

字符串插入变量和表达式。变量名写在 ${} 中,${} 中可以放入JavaScript 表达式。

模板字符串中的换行和空格都是会被保留的。

数组的扩展


ES6 中新增了一些数组的 API ,有些使用频率也是非常高的。

find()和findIndex()

find() 查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。

findIndex( ) 查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。

两个方法其实几乎一样,区别在于 find() 返回的是符合条件的元素,如果没有符合条件的元素,则返回undefined。而 findIndex( ) 返回的是符合条件的元素索引,如果没有符合条件的元素,则返回 -1。这两个方法被前端经常用来判断一组数据中是否有符合条件的值,要注意与数组的 indexOf() 和 some() 方法的区别。

数组的find和findIndex.png

find() 和 findIndex( ) 方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组,这里就不介绍了。这两个方法都可以接受第二个参数,用来绑定回调函数 this 对象。另外,这两个方法都可以发现 NaN ,弥补了数组的 indexOf 方法的不足。上面我提到了 some() 方法,其实如果想要判断数组是否包含某个指定的值 ES6 提出了 includes() 方法,这将更加简洁明了。

所以当你发现很多数组的方法都能实现你的某一个需求,但是怎么快速的敲出最好的那个 API ,这就要我们对每个 API 都足够了解,平时多总结,毕竟让自己的代码变得优雅是每位程序员的追求。

includes()

该方法返回一个布尔值,表示某个数组是否包含给定的值。方法支持两个参数,第一个参数表示搜索的值;第二个参表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。

数组的includes().png

数组的扩展其实还有其他的内容,我这里就不介绍了,你可以自己查阅教程。

对象的扩展


属性简写和属性名表达式

ES6 中对象的属性简写和属性名表达式大家应该都知道。在上面讲到的对象解构赋值其实就是一个属性简写。

对象-属性简写.png

在开发中一定要注意简写的地方,当你在使用某些组件的 API 或者改别人代码时,要知道哪里他是使用了简写,如果你的变量名有改变就一定要改过来,不然当你看到控制台的报错你就匪夷所思了,这代码为什么之前可以跑?现在为什么又跑不了?

assign()

ES6新增了一个操作 Object.assign() , 下面列举三个常见用途。

对象的assign().png

函数的扩展


函数参数的默认值

ES6 可以直接在参数上设置默认值,这比 ES5 只能在函数内为参数设置默认值友好得多。具体用法我们其实在上面讲 函数参数的解构赋值时已经有介绍了。这里就拿官方的例子列举一下。

函数参数的默认值.png

箭头函数

箭头函数因其写法而得名,我们可以用 '=>'去定义函数。

当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。同样这里的 return 简写你也要注意,当你函数的代码块不止一行时,你就该补上 return 了。

函数-箭头函数1.png

官方给出了几个使用箭头函数的注意点:

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

箭头函数中this 指向的固定化,并不是因为箭头函数内部有绑定 this 的机制,实际原因是箭头函数根本没有自己的 this ,导致内部的 this 就是外层代码块的 this 。正是因为它没有 this ,所以也就不能用作构造函数。

Set 和 Map 数据解构


Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。它的一些 API 我就直接通过下面的例子说明了

Sst.png

Map

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。Map 对象在日常的开发中使用的也是非常多,因为 Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构, Map 比 Object 更合适。

Map.png

有使用过乐高、低代码平台的同学知道,在低代码项目的开发中我们会经常处理复杂的数据,Map 对象基本是必不可少。下面举个简单的例子:

map例子.png

这样我们就将对象中的某个字段值和这个对象本身给联系起来了,方便我们快速去匹配。

最后


那么关于 ES6 的基...基...基础就先到这里了,前面的内容也不是很全面,包括 ES6 的 Class 类、模块、Promise对象、Generator函数以及 async 函数等这里就先不介绍了。一方面是我的水平还不足以和大家分享这方面知识,另一方面也是因为每个知识点的内容都很多,适合做专题分享。这里贴两个 ES6 教程的链接:

https://es6.ruanyifeng.com/  阮一峰《ECMAScript 6 教程》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。

https://www.runoob.com/w3cnote/es6-tutorial.html  ES6教程 | 菜鸟教程

当然你要是想要阮一峰老师的《ECMAScript 6 教程》第三版的pdf版电子书,你可以直接钉钉私信我(月杋) 。

目录
相关文章
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
SQL 分布式计算 Hadoop
【赵渝强老师】Hadoop生态圈组件
本文介绍了Hadoop生态圈的主要组件及其关系,包括HDFS、HBase、MapReduce与Yarn、Hive与Pig、Sqoop与Flume、ZooKeeper和HUE。每个组件的功能和作用都进行了简要说明,帮助读者更好地理解Hadoop生态系统。文中还附有图表和视频讲解,以便更直观地展示这些组件的交互方式。
837 5
|
安全 物联网 API
API的科普
在当今这个数字化时代,信息如同血液般在无数个系统、应用和设备之间流淌,而这一切高效、无缝的交互背后,离不开一个至关重要的技术组件——API(Application Programming Interface,应用程序编程接口)。API作为数字世界的桥梁,不仅连接了不同的软件系统,还推动了数据共享、业务自动化以及创新服务的不断涌现。本文将深入探讨API的定义、作用、发展历程、关键技术、应用场景以及未来趋势,旨在揭示API在数字化转型中的核心价值和无限潜力。
1873 1
|
开发者
吴奇胜:加大开放扶持,迎接新社群时代
本文讲的是 :  吴奇胜:加大开放扶持,迎接新社群时代  , 10月22日,以“开放·无界”为主题的2015腾讯全球合作伙伴大会在重庆盛大开幕,大会共设置了1个主论坛和12个分论坛,其中“互联网+QQ”论坛成为当天会议关注的焦点。
1920 0
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
906 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1644 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
364 152