掌握JavaScript ES6精髓:探索函数和对象的高级扩展与实用技巧

序言

JavaScript,作为前端开发中不可或缺的语言,已经发展到了ECMAScript
2015(简称ES6)以及后续的版本。ES6带来了诸多语法上的改进和创新,使得代码更加简洁、优雅,同时也提供了更多的编程模式和实用技巧。本文将带领读者探索ES6中函数和对象的高级扩展及其实用技巧,同时结合最新的互联网技术和行业实践,探讨它们的实际应用。

在这里插入图片描述

ES6函数增强

ES6中对函数的增强主要体现在箭头函数、默认参数、剩余参数、解构赋值等方面。

1. 箭头函数(Arrow Functions)

箭头函数提供了一种更简洁的函数编写方式,特别是对于单行函数体,它消除了function关键字与return语句,使得代码更加直观。

// ES5
function addES5(a, b) {
  return a + b;
}

// ES6
const add = (a, b) => a + b;

箭头函数还隐式地绑定了this,这意味着它不创建自己的this上下文,而是继承自外部作用域的this值。

2. 默认参数(Default Parameters)

默认参数功能允许你在函数调用中省略某些参数,未提供的情况下使用默认值。

// ES5
function multiply(a, b) {
  b = b || 1; // 设置默认值
  return a * b;
}

// ES6
function multiply(a, b = 1) {
  return a * b;
}

3. 剩余参数(Rest Parameters)

剩余参数使得函数可以接收更多的参数,这些参数将被收集到一个数组中,以便进一步处理。

// ES5
function concatES5(values) {
  return Array.prototype.slice.call(arguments, 1).join('');
}

// ES6
function concat(...values) {
  return values.join('');
}

4. 解构赋值(Destructuring Assignment)

解构赋值是一种强大的语法特性,可以将数组或者对象的属性直接赋值给变量,简化了从复杂数据结构中提取数据的过程。

const obj = {name: 'John', age: 30};
const {name, age} = obj;

console.log(name); // "John"
console.log(age);  // 30

ES6对象优化

对象作为JavaScript最核心的数据结构之一,在ES6中也得到了许多增强,包括对象字面量的扩展、计算属性名和Object的扩展方法等。

1. 对象字面量的扩展

ES6对象字面量通过简洁属性和简洁方法,优化了对象的声明方式。

const name = 'John';
const age = 30;

// ES5
var person = {
  name: name,
  age: age,
  sayHi: function() {
    console.log('Hi!');
  }
};

// ES6
const person = {
  name,
  age,
  sayHi() {
    console.log('Hi!');
  }
};

2. 计算属性名(Computed Property Names)

计算属性名允许你在对象字面量中使用表达式作为属性名。

let propName = 'propName';
const obj = {
  [propName]: 'value'
};

console.log(obj.propName); // "value"

3. Object的扩展方法

ES6为Object添加了一些实用方法,如Object.assign()Object.entries()Object.values()等,这些方法使得对象操作更为便捷。

const obj = {a: 1, b: 2, c: 3};
const copyObj = Object.assign({}, obj);

console.log(copyObj); // {a: 1, b: 2, c: 3}

实践案例及其代码

在了解了ES6函数和对象增强的理论知识后,让我们通过一个实践案例来看如何应用这些技术。假设我们正在开发一个网页版的个人记账应用,需要对用户账单进行操作和计算。

1. 曲线球计算

假设我们想要计算账单中每个项目下的金额总和,我们可以利用reduce方法和解构赋值来实现。

const bills = [
  {type: 'grocery', amount: 100},
  {type: 'restaurant', amount: 200},
  {type: 'gas', amount: 50}
];

const totalAmount = bills.reduce((sum, {amount}) => sum + amount, 0);

console.log(totalAmount); // 350

2. 动态计算账单属性

我们还可以根据不同的账单类型动态计算账单的附加费用。

const billTypes = {
  restaurant: {tax: 0.15, tip: 0.10},
  grocery: {tax: 0, tip: 0},
  gas: {tax: 0.03, tip: 0}
};

const calculateBillTotal = (bill) => {
  const {type, amount} = bill;
  const {tax, tip} = billTypes[type];

  return amount + (amount * tax) + (amount * tip);
};

const totalBill = calculateBillTotal({type: 'restaurant', amount: 200});
console.log(totalBill); // 约等于 254

通过以上案例,我们可以看到ES6中的函数和对象增强不仅使代码更加简洁易读,而且让复杂的逻辑变得更容易操作和维护。这些特性在现代前端开发中越来越重要,它们是理解和掌握现代JavaScript的关键。


以上就是JavaScript ES6中函数和对象高级扩展的精髓总结和实践案例分析。随着前端技术的快速发展,掌握这些高级技巧对于开发人员来说至关重要。希望本文能帮助你更好地理解和应用ES6,进一步提升你的代码质量和开发效率。

码克疯v1 | 技术界的疯狂探索者 | 在代码的宇宙中,我是那颗永不满足的探索星。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL客户端与服务端建立连接抓包分析

文章目录 MySQL客户端与服务端建立连接流程抓包分析1.连接建立流程2.各类数据包介绍2.1挑战数据包2.2认证数据包2.3切换认证插件请求数据包2.4切换认证插件响应数据包2.5成功数据包2.6失败数据包3.注意点4.测试代码MySQL客户端与服务端建立连接流程抓包分析 抓包工具采用的是W…

【AI副业指南】用AI做心理测试图文号,单月稳赚7000+(附详细教程)

大家好,我是画画的小强 因为AI的出现,很多自媒体副业项目变得简单容易上手,也给予很多想要在业余时间变现的朋友更丰富的项目选择。 今天分享的赛道绝对颠覆大家的认知,本期将叫大家如何通过AI在自媒体平台上做心理测试账号。 …

vue中实现百度地图全国与省市地图切换

前言 本文主要是用于示例全国地图,点击省市地图直接跳转到该省市地图并展示,可以拓展在地图上显示标记点(本文未做示例),后续有完整代码,但是由于需要与本来项目业务代码进项分割,可能会有些问题…

nexus配置问题

错误信息: npm ERR! code E401 npm ERR! Unable to authenticate, need: BASIC realm"Sonatype Nexus Repository Manager"解决办法一: npm login --registryhttp://192.168.52.128:8081/repository/npm-repo 输入 用户名 密码 邮箱完成后会…

Tower 使用指南

Tower 使用指南 目录 打开 git 仓库查看分支历史切换分支提交修改推送修改创建标签自动拉取最新代码 打开 git 仓库 File -> Open然后选择项目目录 查看分支历史 切换分支 提交修改 推送修改 创建标签 自动拉取最新代码

aardio - 日历

写了个日历小例程,因 lunar 农历库存在问题,经过研究算是变相解决了,日历也完成了雏形,先开源出来,感兴趣的玩玩。 请下载最新paint库、customPlus库、lunar库。 不同的颜色搭配,实现不同的风格&#xff1…

WDG看门狗

一、WDG简介 1、WDG(Watchdog)看门狗 (1)看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入…

URLDNS利用链

利用链分析在我的Github主页 Java反序列化学习 下面写下POC思路 利用点HashMap的readObject private void readObject(java.io.ObjectInputStream s)throws IOException, ClassNotFoundException {// Read in the threshold (ignored), loadfactor, and any hidden stuffs.de…

JAVAWeb---- 数据库的简单了解

目录 1.什么是数据库 2.什么是数据库管理系统 3.什么是SQL 4.什么是关系型数据库 1.什么是数据库 用来存储和管理数据的“仓库”,简称DB(Database); 2.什么是数据库管理系统 对数据库的一切操作都是在数据库管理系统进行的,比如MySQL&a…

Ollama深度探索:AI大模型本地部署的全面教程

目录 引言一、Ollama概述1、定义与定位2、核心功能3、技术优势4、应用场景 二、安装与配置1、系统要求2、安装方法3、配置指南4、启动Ollama服务 四、快速开始1、启动Ollama2、部署运行模型3、REEST API 五、自定义模型1、定制化的必要性2、使用Modelfile定制模型3、参数调整4、…

【数据结构与算法】树的存储,森林 详解

树的几种存贮结构(双亲表示法、孩子表示法、孩子兄弟表示法)的优缺点,各自适应的运算。 双亲表示法: 优点:方便查找双亲及其祖先结点缺点: 查找孩子和兄弟结点比较费事未表示出结点之间的先后次序 适应的运算:查找节点…

iOS封装FrameWork

我们是整个项目封装给客户app用,项目里面有资源文件:xib和图片文件。有第三方,也有.a文件和第三方给我们的frameWork。下面记录下大体遇到的问题及遇到的冲突解决办法。 第一部分:封装frameWork 1.首先准备好,要封装的…

无线领夹麦克风哪款好,领夹麦克风哪个品牌好,多款麦克风推荐

​科技发展让无线领夹麦克风成为现代演讲、演出和采访不可或缺的工具。这种小巧便携的设备让我们摆脱线缆束缚,自由移动同时保持声音清晰稳定。无线领夹麦克风怎么选呢?接下来,我们介绍几款市面上综合表现相当不错的无线领夹麦克风给大家来参…

几十块就能“开盒”,还能查祖上三代?

近期,网络上突然开始掀起一阵“人肉开盒”风波。明星、博主、素人无一幸免。 隐匿在此般恶劣行径背后的幕后黑手们无视法律、充满戾气。他们才不管你是什么人,只要有哪里让他们不愉快,那么不好意思,马上“开”你没商量。 这个“…

ubuntu下同时安装和使用不同版本的库 librealsense

apt 安装的最新版本在/usr 源码安装的旧版本在/usr/local set(realsense2_DIR /usr/local/) find_package(realsense2 2.50.0 REQUIRED) message( "\n\n ${realsense2_INCLUDE_DIR} ${realsense2_VERSION} RealSense SDK 2.0 is FINDINGING, please install it from…

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP,适合做猫狗宠物类的发信息发布,当然懂的修改一下,做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

WPF 深入理解六、ControlTemplate控件模板

ControlTemplate 定义 控件模板用于来定义控件的外观、样式,还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。 对与WPF当中,每个控件都是无外观的,这意味着我们可以完全自定义其可视元素的外观,但是不能修改其内部的行为&#xf…

【MySQL系列】MySQL 字符集的演变与选择

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HUSKY:一个优化大语言模型多步推理的新代理框架

推理被高度认可为生成人工智能的下一个前沿领域。通过推理,我们可以将任务分解为更小的子集并单独解决这些子集。例如以前的论文:思维链、思维树、思维骨架和反射,都是最近解决LLM推理能力的一些技术。此外推理还涉及一些外围功能&#xff0c…

Rust高性能日志库tklog0.0.8—支持mod设置参数

tklog是rust高性能结构化日志库,支持同步日志,异步日志,支持自定义日志的输出格式,支持按时间,按文件大小分割日志文件,支持日志文件压缩备份,支持官方日志库标准API,支持mod独立参数…