都2023年了,JavaScript ES6后的新(lao)特性,你用起来了吗?

news2024/12/24 8:52:52

前言

JavaScript ES6 指的是 ECMAScript 6,它是 JavaScript 语言第六版的规范。ES6 包含了很多新特性和语法糖,涵盖了从 ES6 开始至今所增加的所有特性。

因此,ES6 新特性是指从 ES6 开始新增到当前时刻所有的新特性,包括但不限于 let 和 const、箭头函数、模板字符串、解构赋值、默认参数、Rest 和 Spread 操作符、Promise 等。这些新特性使得开发人员能够更加方便地编写复杂的应用程序,并且让代码更加简洁易读。

本文整理了一些开发中常用的新特性进行介绍。

1. let 和 const 声明变量

ES6 引入了 letconst 关键字,用于声明变量。与 var 不同,letconst 声明的变量都有块级作用域,且不能被重复声明。注意:const 声明必须立刻赋值。

let x = 10;
const PI = 3.14;
if (true) {
  let x = 20; // 不影响外部 x 的值
  const PI = 3.1416; // 不影响外部 PI 的值
}
console.log(x); // 10
console.log(PI); // 3.14

2. 解构赋值

解构赋值是一种通过数组或对象模式来提取值并对变量进行赋值的语法,非常方便实用。可以通过以下方式将一个对象中的元素赋值给新变量。

const person = {
  name: 'Tom',
  age: 18,
  gender: 'male'
}
const { name, age, gender } = person;
console.log(name); // "Tom"

3. 箭头函数

箭头函数是一种更加节省代码、更加易读和理解的函数表达式,它使用箭头符号 => 来代替传统函数的语法格式。箭头函数通常只在需要一个回调函数,特别是与数组和对象方法一起使用时显得最有用。

// 传统函数
function add(x, y) {
  return x + y;
}

// 箭头函数
const add = (x, y) => x + y;

箭头函数也可以简化回调函数的书写。

const numbers = [1, 2, 3, 4, 5];
const even = numbers.filter(num => num % 2 === 0);
console.log(even); // [2, 4]

4. 模板字符串

模板字符串使得字符串拼接更为方便。它使用反引号 `` 包围,并使用 ${} 来插入变量或运算表达式。

const name = 'Tom';
console.log(`My name is ${name}.`); // My name is Tom.

模板字符串也可跨行。

const html = `
<div>
  <h1>Hello World!</h1>
</div>
`;

5. 默认参数

默认参数可以在函数定义时为参数指定默认值,当调用函数时没有传入此参数,则会使用参数的默认值。

function sayHello(name = 'world') {
  console.log(`Hello, ${name}!`);
}
sayHello(); // "Hello, world!"
sayHello('Tom'); // "Hello, Tom!"

6. Rest (剩余)和 Spread(展开)操作符

Rest 和 Spread 操作符都使用 ... 语法,但有不同的作用。

  • Rest 参数用于接收剩余的数组元素,以数组形式存储
function sum(first, ...others) {
  let total = first;
  for (let i = 0; i < others.length; i++) {
    total += others[i];
  }
  return total;
}
console.log(sum(1, 2, 3, 4, 5)); // 15
  • Spread 操作符则用于展开数组,以逗号分隔的形式提供多个值。它可以在函数调用、数组、对象、Map 和 Set 等地方使用
// 数组拼接
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const arr3 = [...arr1, ...arr2];
console.log(arr3); // [1, 2, 3, 4, 5]

// 函数调用
const numbers = [1, 2, 3, 4, 5];
console.log(Math.max(...numbers)); // 5

// 创建新对象
const obj1 = { foo: 'bar', x: 42 };
const obj2 = { foo: 'baz', y: 13 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // {foo: "baz", x: 42, y: 13}

7. Promise

Promise 是一种处理异步操作的机制,它可以让我们更好地控制异步代码流程。

function fetchData(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onload = () => {
      if (xhr.status === 200) {
        resolve(xhr.response);
      } else {
        reject(new Error(`Request failed with status code ${xhr.status}`));
      }
    };
    xhr.send();
  });
}

fetchData('https://jsonplaceholder.typicode.com/users')
  .then(data => console.log(data))
  .catch(error => console.error(error));

在以上示例中,我们创建了一个 Promise 并使用 XHR 发送了 AJAX 请求。如果请求成功,就用 resolve 方法返回结果,否则用 reject 方法返回错误信息。最后,使用 then 和 catch 方法来处理 Promise 的结果和错误。

8. await

await 关键字只能在 async 函数中使用,用于等待 Promise 对象的执行结果。

当 async 函数中的某个表达式使用了 await 关键字时,它会等待这个 Promise 对象的状态发生变化,当 Promise 对象进入 fulfilled 状态时,将把其 resolved 值作为该表达式的运算结果,并继续执行 async 函数中后续的代码。

async function foo() {
  try {
    const result = await someAsyncOperation();
    // result 是异步操作的返回值
  } catch(err) {
    // 错误处理
  }
}

上述示例中,await 等待 someAsyncOperation() 执行完毕,并将其 resolved 的值赋给变量 result,接着执行后续的代码。

需要注意的是,await 只能在 async 函数中使用,并且只能放在 Promise 对象前面。如果我们需要等待多个 Promise 对象,可以使用 Promise.all() 方法。

async function foo() {
  try {
    const [result1, result2] = await Promise.all([promise1, promise2]);
    // 等待 promise1 和 promise2 均完成,并将它们的 resolved 值分别赋值给 result1 和 result2
  } catch(err) {
    // 错误处理
  }
}

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

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

相关文章

FPGA XDMA 中断模式实现 PCIE X8 HDMI视频采集 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案视频采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串…

四肽-21——改善皮肤紧实感、光滑感和弹性

简介 四肽-21是一种来源于皮肤自身的四胜肽&#xff0c;它结构独特、能高效的促进细胞外基质合成&#xff0c;从而减少各种皱纹和改善皮肤衰老现象。与市场上非常受欢迎的基肽(Matrixyl&#xff09;相比&#xff0c;四肽-21效果更为突出。 Tetrapeptide-21 is a type of tetra…

LeetCode - #85 最大矩形(Top 100)

文章目录 前言1. 描述2. 示例3. 答案题解 1题解 2 关于我们 前言 本题为 LeetCode 前 100 高频题 本题由于没有合适答案为以往遗留问题&#xff0c;最近有时间将以往遗留问题一一完善。 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&am…

解密后无法加载到指定模版,且模版名为空

问题如图&#xff1a; 原因&#xff1a;因为改变了项目的集成管理&#xff0c;导致变量丢失

Redis原理 - 五种数据类型的底层结构关系

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis原理 - 五种数据类型的底层结构关系 | CoderMast编程桅杆https://www.codermast.com/database/redis/base-datatype-implement.html #字符串对象String String 是 Redis 中最常见的数据存储类型。 其基本编码方式是 …

安卓蓝牙SDP协议数据包

1. SDP概念 我们想一想&#xff0c;两个陌生的设备&#xff08;之前未有过交互&#xff09;如何去发现对方支持什么服务呢&#xff1f;比如Host端的Controller怎么知道远程蓝牙设备是蓝牙耳机还是HID遥控器呢&#xff1f;我们需要一种协议&#xff0c;这种协议在蓝牙设备配对成…

Git-Desktop【使用说明】

仓库操作 简单的创建仓库、删除仓库 删除点击 Remove 即可 文件操作 1、提交文件到本地仓库 2、修改文件 Git没有修改文件这一说&#xff0c;它只会再次提交一个新的版本到仓库中&#xff0c;提交修改后的文件其实是在仓库创建了一个新的文件&#xff0c;只不过是一个不同的…

Optano.Modeling 简单教程

前言 在工作中遇到两个需求&#xff0c;将两个数学公式用 .NET 的数学库找到数学公式中某个未知数的最优解&#xff0c;我尝试了几个数学库都没有办法完美解决我的需求&#xff0c;直到找到 Optano.Modeling Optano.Modeling 官网&#xff1a;Optano.Modeling 官网 Optano.Mo…

AI操作视频的工具最新最强集合

AI的进化日新月异&#xff0c;很多之前只是在想象中的操作&#xff0c;已经有很多可以使用AI来完成了。最新的Stable Diffusion,ControlNet,EBsynth有哪些神奇的应用&#xff0c;如何一键替换视频中人物和场景&#xff0c;如何根据文字描述即可生成梦幻视频&#xff1f;我们整理…

DFS/回溯/动态规划算法的融会贯通

学算法认准 labuladong 后台回复课程查看精品课 点击卡片可搜索文章&#x1f447; 在线学习网站&#xff1a; https://labuladong.gitee.io/algo/ 经常有读者后台问我&#xff0c;DFS算法/回溯算法/动态规划算法之间的区别和联系是什么&#xff1f; 对于这个问题&#xff0c;我…

私有化部署的无忧·企业文档2.1.7新版本核心功能介绍

无忧企业文档是一款针对企业用户提供在线文档、协同编辑、知识管理的基础化办公工具&#xff0c;产品采用B/S构架。功能覆盖场景包括&#xff1a;在线文档的私有化部署、团队协同、知识管理、在线文档识别的扩展、文档权限化管理等等场景。本次2.1.7版本更新了以下几个核心功能…

【机器学习】十大算法之一 “线性回归”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

什么是事件委托

文章目录 导文文章重点具体而言&#xff0c;事件委托包含两个主要角色&#xff1a;通过使用事件委托&#xff0c;可以实现以下优势&#xff1a; 代码示例 导文 事件委托是一种在软件开发中常用的设计模式&#xff0c;用于处理事件和回调函数。它允许一个对象&#xff08;委托对…

数据帧转发过程中IP地址及MAC地址的变化

数据帧在交换机间转发 帧经过交换机时&#xff0c;其源、目标MAC是不会变的。 交换机内部的CPU会在每个端口成功连接时&#xff0c;通过将MAC地址和端口对应&#xff0c;形成一张MAC表。在今后的通讯中&#xff0c;发往该MAC地址的数据包将仅送往其对应的端口&#xff0c;而不…

odoo字段加密以及模糊显示

在信息时代&#xff0c;信息本身是把双刃剑&#xff0c;一方面它服务于我们的生产、生活、使我们受益&#xff1b; 一方面,信息的泄露可能对我们构成巨大的威胁。因此&#xff0c;客观上就需要一种有力的安全措施来保护机密数据不被窃取或篡改 。 数据加密与解密从宏观上讲是非…

[2022]DyOb-SLAM : Dynamic Object Tracking SLAM System

1.作者 Rushmian Annoy Wadud、Wei Sun 2.时间 2022 3.整体架构 DyOb-SLAM是DynaSLAM和VDO-SLAM的结合: 基于先验信息使用Mask RCNN分割出动态目标通过基于光流和场景流的算法对运动目标进行跟踪对静态点进行BA优化 输出&#xff1a; 当前帧显示ORB特征以及Masj信息和对…

探索Zabbix API:企业监控管理工具

新钛云服已累计为您分享754篇技术干货 Zabbix是一种流行的开源监控解决方案&#xff0c;其强大的API功能为用户提供了灵活且可扩展的监控管理能力。本文将介绍Zabbix API的基本概念和用法&#xff0c;以及如何利用API来简化监控配置、数据获取和自动化任务等方面的工作。 在现代…

数据结构 树

树的基本概念 树是一种非线性的数据结构&#xff0c;它由节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。树的基本概念包括以下要点&#xff1a; 树由一个根节点&#xff08;root&#xff09;开始&#xff0c;根节点没有父节点&#xff0c;它可以有…

华为OD机试之阿里巴巴找黄金(III)(Java源码)

文章目录 阿里巴巴找黄金&#xff08;III&#xff09; 阿里巴巴找黄金&#xff08;III&#xff09; 题目描述 一贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字。阿里…

Rancher创建arm架构的下游k8s集群

目录 前言添加自定义集群镜像源配置使用支持ARM架构的docker镜像 前言 费了些时间在成功在华为云arm架构的服务器上搭建了k8s集群&#xff0c;期间问题不断&#xff0c;以下是三个关键点&#xff1a; 确保网络能正常拉取所需镜像拉取的镜像需支持arm架构 否则报错&#xff1a…