浅谈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版电子书,你可以直接钉钉私信我(月杋) 。

目录
相关文章
|
3月前
|
缓存 编译器 程序员
C语言深度解析:restrict关键字——编译器性能优化的终极钥匙
C99的`restrict`关键字是C语言性能优化的“终极钥匙”:它向编译器承诺指针独占访问内存,彻底解决同类型指针别名问题,解锁循环向量化、寄存器缓存等激进优化。滥用致未定义行为,善用则性能飙升数倍——这才是真正高阶C程序员的必修课。(239字)
|
2月前
|
人工智能 安全 JavaScript
Windows 环境 OpenClaw v2.6.2 一键部署完整教程
OpenClaw(小龙虾AI)是开源本地AI智能体,支持Windows一键部署,3分钟完成安装。零代码、全自动、内置全部依赖,可离线操控电脑执行文件整理、表格生成、浏览器自动化等任务,保障数据隐私。GitHub星标超28万!
Windows 环境 OpenClaw v2.6.2 一键部署完整教程
|
25天前
|
人工智能 API 开发工具
阿里云百炼Coding Plan是什么?售罄了吗?支持AI大模型、用量额度、使用教程及问题解答FAQ
阿里云百炼Coding Plan是面向开发者的AI编程订阅服务,现仅售Pro版(200元/月),含9万次/月调用额度,支持Qwen3.5-Plus、GLM-5、Kimi-k2.5等多模型,兼容Cursor、OpenClaw等工具。每日9:30限量抢购,不支持退款。阿里云CodingPlan官网:https://t.aliyun.com/U/G7pldC
256 0
|
6月前
|
关系型数据库 MySQL Serverless
阿里云企业用户注册账号、优惠券领取、云服务器购买详细步骤流程(图文)
阿里云账号怎么注册?阿里云服务器怎么购买?好多同学都不清楚,今天写一篇文章进行系统性的介绍。最新阿里云企业用户注册流程,一键注册阿里云账号、快速通过企业实名认证,免费领取企业上云补贴折扣券、代金券、抵扣金、算力补贴及免费试用机会,这篇文章整理阿里云企业用户注册流程、所需材料及问题解答FAQ。
|
3月前
阿里云服务器发票开具:抬头设置 + 申请 + 下载全攻略,2026年最新教程
阿里云服务器发票开具全攻略:登录用户中心→设置抬头(个人/企业)→勾选订单申请→下载电子票或收纸质专票。支持增值税普票/专票,税率通常6%(硬件13%)。电子票可报销,纸质专票包邮。详见官方指南。
637 3
|
3月前
|
SQL 人工智能 自然语言处理
JeecgBoot低代码 AI Skills 代码生成实战:用自然语言驱动全栈 CRUD 开发
JeecgBoot低代码平台推出AI代码生成Skills,基于Claude Code实现自然语言驱动的全栈CRUD开发。支持智能字段推导、字典自动匹配、增量修改等能力,一句话即可完成从需求描述到可运行代码的全链路生成。
537 0
|
6月前
|
存储 人工智能 数据可视化
阿里云万小智 AI 建站系统全解析:版本功能、价格体系与场景适配
在企业数字化转型与个人建站需求增长的背景下,阿里云基于通义大模型推出的万小智 AI 建站系统,以 “低门槛、高效率、全集成” 为核心优势,成为无需专业开发能力用户的重要选择。该系统分为基础版、标准版、企业版三个层级,覆盖从个人博客到中大型企业官网的全场景需求,且购买即赠 CN 域名,进一步降低建站成本。本文结合今年最新官方文档与实测体验,从核心特性、版本差异、价格规则、场景适配等维度展开解析,为用户提供客观选型参考。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
2025AI数字人企业名单列表新发布
解码数字人生态,揭秘十大领军企业与技术革新。像衍科技凭全链条技术领跑,AI驱动数字人在服务、娱乐、政务等多场景落地,推动产业智能化升级。
|
8月前
|
数据库连接 API 数据安全/隐私保护
Python字符串处理:超越split与join的五大高效技巧
本文介绍Python字符串处理的五大高效技巧:strip家族精准去字符、partition分割结构化数据、count统计子串、高级比较方法及正则应用,结合真实案例与性能对比,提升开发效率。
313 0
|
5G UED
频谱效率的奥秘与5G的提升之道
频谱效率的奥秘与5G的提升之道
983 63