“ ES6+ —— 让你的JavaScript代码从平凡到精彩 “

news2025/1/21 21:53:03

9a69fede8b2044a79dd834e3e48f20b4.png前期回顾f8e3cc1a0f694ac2b665ca2ad14c49d7.png  

【提高代码可读性】—— 手握多个代码优化技巧、细数哪些惊艳一时的策略_0.活在风浪里的博客-CSDN博客代码优化对象策略https://blog.csdn.net/m0_57904695/article/details/128318224?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128318224%22%2C%22source%22%3A%22m0_57904695%22%7D

目录

☠  let 和 const

🍍 箭头函数

🎀 模板字符串

💊 对象解构赋值

🎉 展开运算符

🔱 类和继承

🎉 箭头函数中的 this 关键字

📐  Promise

👋💋 谢谢观看 :


 


      在本文你如果有基础,5分钟即可温习一遍。没有"es6+"经验,十分钟亦可掌握雷电!看完直呼技术迭代过快,(其实老早都出来了,都快比我年纪大了)-2015-6

 念及此,直接开始

☠  let 和 const

ES6 引入了两个新的声明变量的关键字 let 和 const。let 关键字用于声明局部(函数)变量,而 const 关键字用于声明常量(值不可改)。 

function foo() {
  let x = 1;
  if (true) {
    let x = 2; // 块级作用域内声明的变量 x 与外部变量 x 不同
    console.log(x); // 输出 2
  }
  console.log(x); // 输出 1
}

在使用 const 声明常量时,变量的值是不可更改的。例如:

const PI = 3.14;
PI = 3; // 抛出错误,因为常量值不可更改

🍍 箭头函数

ES6 引入了箭头函数,这是一种更加简洁的函数定义方式。箭头函数可以帮助我们更好地管理函数作用域,并减少代码量。 

// 使用普通函数定义
function foo(x, y) {
  return x + y;
}

// 使用箭头函数定义
const bar = (x, y) => x + y;

 箭头函数有一个特殊的语法规则,如果函数体只有一条语句,可以省略函数体的大括号和 return 关键字,如果只有一个参数小括号也可以省略。例如: 


// 使用箭头函数定义
const baz = x => x;

// 等价于
const qux = (x) => {
  return x ;
};

🎀 模板字符串

 ES6 引入了模板字符串,这是一种更加灵活的字符串定义方式。模板字符串支持变量插值和多行字符串。 


// 使用普通字符串定义
const str1 = "Hello, " + name + "!";

// 使用模板字符串定义
const str2 = `Hello, ${name}!`;

 在模板字符串中,使用 ${} 语法可以插入变量或表达式。例如: 

const x = 1;
const y = 2;
const result = `${x} + ${y} = ${x + y}`; 

console.log(result) // 输出: 1 + 2 = 3

模板字符串还支持多行字符串定义,这可以帮助我们更好地组织和排版代码。例如: 


const str = `
  <div>
    <h1>Hello, world!</h1>
    <p>This is a demo of template strings.</p>
  </div>
`;

💊 对象解构赋值

 ES6 引入了对象解构赋值,这是一种更加方便的变量赋值方式。对象解构赋值可以从对象中提取值并将其赋给变量,从而简化了代码。


// 使用普通方式获取对象属性
const person = { name: "Alice", age: 25 };
const name = person.name;
const age = person.age;

// 使用对象解构赋值获取对象属性
const { name, age } = person;

 在对象解构赋值中,用花括号 {} 括起来的变量名,必须和对象属性名一致。例如: 


const person = { name: "Alice", age: 25 };
const { name: personName, age: personAge } = person; // 将 person 对象的name 和 age 属性分别赋值给 personName 和 personAge 变量

console.log(personName); // 输出 "Alice"
console.log(personAge); // 输出 25

🎉 展开运算符

 ES6 引入了展开运算符,可以将数组或对象遍历展开为一系列一维值。展开运算符可以使代码更加简洁。 

数组:


const arr = [1, 2, 3];
console.log(...arr); // 输出 1 2 3

对象:


const obj1 = { x: 1, y: 2 };
const obj2 = { z: 3 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // 输出 { x: 1, y: 2, z: 3 }

 数组合并:

// 使用普通方式合并数组
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = arr1.concat(arr2);

// 使用展开运算符合并数组
const arr4 = [...arr1, ...arr2]; // 输出:(6) [1, 2, 3, 4, 5, 6]

🔱 类和继承

ES6 引入了类和继承,可以使面向对象编程更加方便和易于理解。


class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

class Student extends Person {
  constructor(name, age, grade) {
    super(name, age);
    this.grade = grade;
  }

  study() {
    console.log(`${this.name} is studying in grade ${this.grade}.`);
  }
}

      在上述代码中,我们定义了一个 Person 类和一个 Student 类。Student 类继承自 Person 类。在构造函数中,使用 super() 调用父类的构造函数,并传入必要的参数。在子类中可以添加自己的属性和方法。例如,我们在 Student 类中添加了一个 study() 方法。

通过以上几个例子,我们简要介绍了 ES6 的一些新特性,包括 let 和 const、箭头函数、模板字符串、对象解构赋值、展开运算符以及类和继承。这些特性都可以使 JavaScript 代码更加简洁、易读和易于维护。

详情看这篇:class 类的继承_class 类函数继承_0.活在风浪里的博客-CSDN博客class 类的继承https://blog.csdn.net/m0_57904695/article/details/121976812?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258344316782425116273%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258344316782425116273&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-121976812-null-null.article_score_rank_blog&utm_term=class&spm=1018.2226.3001.4450

🎉 箭头函数中的 this 关键字

       在 ES6 中,箭头函数是一种新的函数定义方式。箭头函数可以使代码更加简洁,特别是在使用函数作为回调函数时。与普通函数不同的是,箭头函数的 this 关键字绑定到定义时的作用域,而不是调用时的作用域。这个特性可以避免 this 绑定错误的问题。 

当使用箭头函数时,`this`关键字将指向最近的外层非箭头函数的上下文。如果没有找到外层的非箭头函数,则`this`将指向全局对象。


const person = {
  name: "Alice",
  sayHello: function() {
    console.log(`Hello, my name is ${this.name}.`);
  },
  sayHelloArrow: () => {
    console.log(`Hello, my name is ${this.name}.`);
  }
};

person.sayHello(); // 输出 "Hello, my name is Alice."
person.sayHelloArrow(); // 输出 "Hello, my name is undefined."

        在上述代码中,我们定义了一个 person 对象,其中包含两个方法:sayHello 和 sayHelloArrow。在 sayHello 方法中,我们使用普通函数定义方式,并使用 this 关键字引用 person 对象的 name 属性。在 sayHelloArrow 方法中,我们使用箭头函数定义方式,并尝试使用 this 关键字引用 person 对象的 name 属性。然而,由于箭头函数的 this 关键字绑定到定义时的作用域,因此 this 关键字指向的是全局对象,导致输出为 undefined。

详情看这篇:

this指向问题_0.活在风浪里的博客-CSDN博客this指向问题https://blog.csdn.net/m0_57904695/article/details/121959431?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258356516800182168632%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258356516800182168632&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-8-121959431-null-null.article_score_rank_blog&utm_term=%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4450

📐  Promise

       Promise 是一种解决异步编程的方案。在 ES6 中,Promise 是内置的全局对象,可以使异步代码更加清晰和易于理解。


function getData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = [1, 2, 3];
      if (data.length > 0) {
        resolve(data);
      } else {
        reject("No data available.");
      }
    }, 1000);
  });
}

getData()
  .then(data => console.log(data))
  .catch(error => console.error(error));

       在上述代码中,我们定义了一个 getData 函数,它返回一个 Promise 对象。在 Promise 的构造函数中,我们执行异步操作,并在完成时调用 resolve 或 reject 函数,以表示操作成功或失败。在调用 getData 函数后,我们可以使用 then 方法处理成功的结果,使用 catch 方法处理失败的结果。

详情看这篇:

Promise一分钟入坑_0.活在风浪里的博客-CSDN博客/ 原型上有catch then //得到实例化对象 它其实就是一个构造函数 let promise = new Promise((resolve, reject) => { }) console.log(promise);得到实例化对象https://blog.csdn.net/m0_57904695/article/details/121928022?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258371116782425125013%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258371116782425125013&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-121928022-null-null.article_score_rank_blog&utm_term=promise&spm=1018.2226.3001.4450 Promise手撕axios,(它是咋用原生封装的)_0.活在风浪里的博客-CSDN博客in the race在比赛中;有成功的可能,妙笔生花,相信自己正片开始 //这种是不是很简单,答对了,真是个大聪明,他是基于promise封装过了, axios({ url: 'https://cnodejs.org/api/v1/topics' }).then(res => { console.log(res); }) //这是不是一个函数调用?哈哈,调用里面写了实..https://blog.csdn.net/m0_57904695/article/details/121931205?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258371116782425125013%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258371116782425125013&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-121931205-null-null.article_score_rank_blog&utm_term=promise&spm=1018.2226.3001.4450

Promise.all 和 Promise.race (怎么使用)_promise.race([firstpromise, secondpromise]).then(r_0.活在风浪里的博客-CSDN博客需求:计算两个异步方法,等所有请求都返回在计算他们Promise.all 可以接收多个promise作为参数 当所有的promise都执行结束后会返回结果,使用场景封装请求的时候使用loding加载,当这个请求完毕,另一个请求的loding也结束会形成loding闪烁,<script> //下面一个例子 我需求要这两个异步方法的和,当所有的promise都执行结束后会返回结果 let promise1 = new Promise((resolve, r..https://blog.csdn.net/m0_57904695/article/details/121934475?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258371116782425125013%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258371116782425125013&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-121934475-null-null.article_score_rank_blog&utm_term=promise&spm=1018.2226.3001.4450手写promise class类封装promise_0.活在风浪里的博客-CSDN博客先写class类构造函数,接着实例化对象出来,传入resolve, reject形参,在构造函数中try cactch,验证是否传入的是否是函数,定义默认状态,根据条件变成成功或失败,此时架子已经搭好,但无法异步通讯,定义两个数组,在失败和成功函数中循环它并将其返回出去,为什么是数组?答:因为还有promise.all promise.race 等其他方法,方便封装传值! 感谢阅读到此 <!-- class类封装promise --> <script> .https://blog.csdn.net/m0_57904695/article/details/121975983?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168258371116782425125013%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168258371116782425125013&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-121975983-null-null.article_score_rank_blog&utm_term=promise&spm=1018.2226.3001.4450

👋💋 谢谢观看 :

 还有很多特性,需自行学习,

7730e2bd39d64179909767e1967da702.jpeg

 _______________________________  期待再见  _______________________________ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GQCNN

Berkeley AUTOLAB’s GQCNN Package — GQCNN 1.1.0 documentation (berkeleyautomation.github.io) (3条消息) 机器人抓取&#xff08;六&#xff09;—— 抓取点检测&#xff08;抓取位姿估计&#xff09; gqcnn代码测试与解读_zxxRobot的博客-CSDN博客 GQ-CNN模型对生成数据…

C#,OpenCv开发指南(02)——OpenCvSharp编程入门与矩阵Mat的基础知识

在 Visual Studio 中很方便搭建与使用 OpenCV 的 C# 的开发环境&#xff0c;几乎不用键盘输入。 使用 C# 开发 OpenCV 可以直接成为工业软件产品&#xff0c;而不是实验室程序。世界上几乎所有的视频厂家都提供 C# OpenCV 开发接口。 C#&#xff0c;人工智能&#xff0c;深度学…

常见jvm调优操作详细记录

最近很多小伙伴跟我说&#xff0c;自己学了不少JVM的调优知识&#xff0c;但是在实际工作中却不知道何时对JVM进行调优。今天&#xff0c;我就为大家介绍几种JVM调优的场景。 cpu占用过高 cpu占用过高要分情况讨论&#xff0c;是不是业务上在搞活动&#xff0c;突然有大批的流…

SpringBoot整合ELK做日志(超完整)

SpringBoot整合ELK日志系统 SpringBoot整合ELK做日志环境准备安装包准备ELK安装包Java11安装包 软件安装安装java11安装ElasticSearch安装Kibana安装Logstash 编写SpringBoot项目初始化SpringBoot项目修改代码编写Controller SpringBoot整合ELK做日志 环境准备 提前准备一台C…

SpringBoot+Linux操作系统与项目部署(这一篇就够了|超详细)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

华为联合openEuler发布全新NFS+协议,实现NAS存储性能与可靠性倍增

在openEuler开发者大会2023上&#xff0c;华为携手openEuler发布NFS协议&#xff0c;实现单客户端访问NAS存储可靠性提升3倍、性能提升6倍&#xff0c;助力NAS存储全面满足新型生产核心场景下苛刻要求。 在数字转型的新时代&#xff0c;非结构化数据价值持续提升。金融、大企业…

一种IPC通信机制Gdbus详解

一、DBus介绍 常规进程间通信有管道&#xff0c;消息队列&#xff0c;共享内存&#xff0c;以及socket等&#xff0c;每个都有优劣&#xff0c;这次我们介绍一种高阶的进程间通信方式DBus。 DBus通信是IPC通信机制的一种方式&#xff0c;本身是建立在socket机制之上&#xff0…

计算机网络——快速了解常见应用层协议体系

文章目录 〇、加密算法对称加密非对称加密 一、远程登录——TELNET、SSH1.Telnet2.SSH 二、文件传输——FTP、SFTP、FTPS1.FTP2.SFTP3.FTPSSSL工作原理 三、电子邮件——SMTP、POP、IMAP1.SMTP&#xff08;推送邮件&#xff09;2.POP&#xff08;接收邮件&#xff09;3.IMAP 四…

计算机中的数据存储

计算机的存储规则&#xff1a; 文本、图片、声音所有的数据存储 在计算机当中一般会有三类数据&#xff1a;文本数据、图片数据以及声音数据其中文本它又包含了数字、字母以及汉字视频的本质是图片和声音的组合体。在计算机当中&#xff0c;任意的数据都是以二进制的形式来存储…

【Matlab】基于偏格式动态线性化的无模型自适应控制

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 &#x1f449;对应书本 4.3 单输入单输出系统(SISO)偏格式动态线性化(PFDL)的无模型自适应控制(MFAC) 上一篇博客介绍了基于紧格式动态线性化的无模型…

K8S---Service

服务原理 容器化的问题&#xff1a; 1.自动调度 无法预知pod所在节点&#xff0c;pod的IP地址 2.有故障时&#xff0c;换新节点新ip进行部署 service就是解决这些问题 自动跟踪 clusterip不变 都能找到对应pod 主要靠后端pod的标签 负载均衡 通过iptables/LVS规则将访问的请…

MySQL 数据库概述

数据&#xff08;Data&#xff09; 描述事物的符号记录包括数字&#xff0c;文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储 表 将不同的记录组织在一起用来存储具体数据 记录&#xff1a;行 字段&#xff08;属性&#xff09;&#xff1a;列 数…

[Gitops--7]Kubesphere 配置镜像仓库

Kubesphere 配置镜像仓库 1. Harbor https证书配置 1.1 生成Harbor证书 mkdir /apps/harbor/cert -p cd /apps/harbor/cert openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -subj "/CCN/STShanghai/LShanghai/Opana/OUDevops/CNharbor.i…

HBase(3):集群搭建

1 基础环境需求 jdk1.8以上Hadoopzookeeper 2 下载HBase安装包 Apache Downloads 3 安装 3.1 上传解压HBase安装包 tar -xvzf hbase-3.0.0-alpha-3-bin.tar.gz -C /opt/ 3.2 修改HBase配置文件 &#xff08;1&#xff09;修改hbase-env.sh cd /opt/hbase-3.0.0-alpha-3-bi…

【音视频第21天】RTP、RTCP结合wireshark抓包详解

感觉单纯看理论没啥意思&#xff0c;结合RTCP、RTP来看一看抓包详解 RTP 实时传输协议RTP&#xff08;Realtime Transport Protocol&#xff09;&#xff1a;是针对Internet上多媒体数据流的一个传输协议, 由IETF作为RFC1889发布&#xff0c;现在最新的为RFC3550。RTP被定义为…

基于PyQt5的图形化界面开发——自制Redis图形化客户端(文末附源码)

基于PyQt5的图形化界面开发——自制Redis图形化客户端 前言1. Python第三方库安装及Redis学习1.1 Python第三方库安装1.2 Redis数据库安装和基础命令 2. 登录界面2.1 login.py2.2 image_login.py 3. 主界面3.1 main_ui.py3.2 image_main.py 4.界面切换5. 写在最后(附下载链接) …

软件测试笔记(三):黑盒测试

1 黑盒测试概述 黑盒测试也叫功能测试&#xff0c;通过测试来检测每个功能是否都能正常使用。在测试中&#xff0c;把程序看作是一个不能打开的黑盒子&#xff0c;在完全不考虑程序内部结构和内部特性的情况下&#xff0c;对程序接口进行测试&#xff0c;只检查程序功能是否按…

Java——把数组排成最小的数

题目链接 牛客网在线oj题——把数组排成最小的数 题目描述 输入一个非负整数数组numbers&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。 例如输入数组[3&#xff0c;32&#xff0c;321]&#xff0c;则打印出这三个数字能…

汇编语言(第3版)- 学习笔记 - 第1章-基础知识

汇编语言&#xff08;第3版&#xff09;- 学习笔记 - 第1章-基础知识 1.1 机器语言1.2 汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线1.11 内存地址空间(概述)1.12 主板1.13 接口卡1.14 各…

NSSCTF-[NSSRound#X Basic]ez_z3 [MoeCTF 2022]Art [HDCTF2023]basketball

目录 NSSCTF-[NSSRound#X Basic]ez_z3 [MoeCTF 2022]Art [HDCTF2023]basketball NSSCTF-[NSSRound#X Basic]ez_z3 题目下载&#xff1a;下载 查壳&#xff1a; 发现有upx壳&#xff0c;但是使用upx -d命令不能脱壳&#xff0c;载入十六进制编辑器查看 把XYU改为UPX&#x…