ES6/ES11知识点 续一

模板字符串

在 ECMAScript(ES)中,模板字符串(Template Literals)是一种非常强大的字符串表示方式,它为我们提供了比传统字符串更灵活的功能,尤其是在处理动态内容时。模板字符串通过反引号(`)包裹,支持多种特性,如插入变量、表达式、支持多行字符串等。

基本语法

模板字符串使用反引号(`)而不是单引号(’)或双引号(”)来定义字符串:

let name = 'Alice';
let greeting = `Hello, ${name}!`;
console.log(greeting); // 输出: Hello, Alice!

在上面的例子中,${name} 是一个占位符,它会被 name 变量的值所替代。模板字符串的这种功能可以让我们轻松地拼接字符串,而无需使用传统的 + 操作符。

插入变量和表达式

模板字符串不仅能插入简单的变量,还能插入复杂的表达式。例如,你可以进行算术运算、调用函数或是执行逻辑判断:

let a = 5;
let b = 10;
let result = `The sum of ${a} and ${b} is ${a + b}`;
console.log(result); // 输出: The sum of 5 and 10 is 15let user = { name: 'Alice', age: 25 };
let userInfo = `${user.name} is ${user.age} years old.`;
console.log(userInfo); // 输出: Alice is 25 years old.

在这里,模板字符串中的 ${a + b} 会自动计算并替换成结果 15,而 ${user.name} 会替换为 Alice。

多行字符串

传统的字符串无法直接处理多行内容,通常需要使用转义字符(\n)来模拟换行。但模板字符串天然支持多行字符串,可以让你写出更加直观、可读的代码:

let multiline = `
This is a string
that spans multiple
lines.`;
console.log(multiline);
// 输出:
// This is a string
// that spans multiple
// lines.

在这个例子中,字符串的换行和缩进是自动保留的,无需额外的符号。

标签模板

标签模板(Tagged Templates)是模板字符串的高级用法。标签模板允许你在模板字符串前加上一个函数,该函数可以对模板字符串进行处理,甚至改变模板的内容。这对于处理自定义格式化、国际化或安全性(如防止 XSS 攻击)等场景非常有用。

标签模板的基本结构如下:

function tag(strings, ...expressions) {console.log(strings); // 模板字符串的文字部分console.log(expressions); // 模板字符串的表达式部分return 'Processed String';
}
let name = 'Alice';
let age = 25;let message = tag`Hello, ${name}. You are ${age} years old.`;
console.log(message); // 输出: Processed String
•	strings 是一个数组,包含了模板字符串中所有的文字部分。
•	expressions 是一个数组,包含了所有插入模板中的表达式。

你可以在标签函数中对 strings 和 expressions 进行任何操作,来定制输出的字符串。

嵌套模板字符串

模板字符串也可以嵌套,支持更复杂的表达式结构。例如,模板字符串可以包含其它模板字符串作为表达式:

let name = 'Alice';
let greeting = `Hello, ${`my name is ${name}`}`;
console.log(greeting); // 输出: Hello, my name is Alice

在这个例子中,${my name is ${name}} 表达式首先会被解析为 “my name is Alice”,然后再插入到外部的模板字符串中。

其他用法

1.	表达式中的函数调用:

你可以在模板字符串的占位符中直接调用函数:

function toUpperCase(str) {return str.toUpperCase();
}let name = 'Alice';
let message = `Hello, ${toUpperCase(name)}!`;
console.log(message); // 输出: Hello, ALICE!
2.	条件运算符:

模板字符串支持在占位符中使用条件运算符:

let age = 20;
let status = `You are ${age >= 18 ? 'an adult' : 'a minor'}.`;
console.log(status); // 输出: You are an adult.
3.	嵌套对象属性:

你可以直接在模板字符串中访问对象的嵌套属性:

let user = { profile: { name: 'Alice', age: 25 } };
let message = `Name: ${user.profile.name}, Age: ${user.profile.age}`;
console.log(message); // 输出: Name: Alice, Age: 25

总结

模板字符串提供了一种比传统字符串更简洁、更强大的方式来操作字符串。它不仅支持插入变量和复杂的表达式,还能轻松处理多行字符串,增强代码的可读性和可维护性。通过标签模板功能,模板字符串还能用于自定义处理、格式化和优化应用程序的输出。

简化对象写法

在 ECMAScript(ES6)中,简化对象写法是一个非常方便的特性,它使得创建对象变得更加简洁和直观。通过这一特性,你可以在定义对象时减少冗余的代码,使代码更加清晰和易于维护。

🧑‍💻 简化对象字面量的语法

在 ES6 之前,定义一个对象时,如果属性名和变量名相同,你需要手动写出属性名和变量值,如下所示:

let name = 'Alice';
let age = 25;let person = {name: name,age: age
};console.log(person); // 输出: { name: 'Alice', age: 25 }

在 ES6 中,你可以通过简化语法来去掉冗余的代码,只需要写出变量名,JavaScript 会自动推断属性名和值:

let name = 'Alice';
let age = 25;let person = {name,age
};console.log(person); // 输出: { name: 'Alice', age: 25 }

这里,name 和 age 的属性名会自动对应于同名的变量 name 和 age,无需再手动指定属性名。

🔄 简化函数写法

ES6 还简化了对象中函数的写法。你可以省略函数声明中的 function 关键字,而是直接使用简化的语法:

let person = {name: 'Alice',greet() {console.log('Hello, ' + this.name);}
};person.greet(); // 输出: Hello, Alice

在这个例子中,greet() 是对象 person 的一个方法,ES6 中你不再需要写 function greet(),而直接使用 greet()。

🔑 动态属性名

ES6 中还允许你动态地设置对象的属性名,这样可以在定义对象时使用表达式来作为属性名,而不是固定的字符串。这对于需要根据某些条件动态生成对象属性的场景非常有用。

let key = 'age';
let value = 25;let person = {name: 'Alice',[key]: value // 使用表达式作为属性名
};console.log(person); // 输出: { name: 'Alice', age: 25 }

这里,[key] 表示一个计算的属性名,它的值来自变量 key,最终对象的属性名是 age。

⚙️ 方法简写和计算属性名结合

你也可以将简化的对象方法写法与动态属性名结合使用,进一步提高代码的灵活性和简洁性:

let key = 'age';
let person = {name: 'Alice',[key]: 25,greet() {console.log(`Hello, ${this.name}`);}
};person.greet(); // 输出: Hello, Alice
console.log(person.age); // 输出: 25

在这个例子中,[key] 让你可以根据变量 key 的值动态地为对象添加属性,同时 greet() 方法的简写语法也让代码更加简洁。

🔁 对象解构与简化写法

对象解构是一种提取对象属性并简化赋值的方式,它与简化对象写法结合使用,能够让你更高效地获取对象的属性。你可以直接在变量定义时提取对象的属性值,并简化代码:

let person = {name: 'Alice',age: 25
};let { name, age } = person;console.log(name); // 输出: Alice
console.log(age);  // 输出: 25

在这个例子中,{ name, age } 是对对象 person 的解构,它会自动提取 name 和 age 属性,并赋值给对应的变量 name 和 age。

🎯 总结

ES6 中的简化对象写法是一个非常有用的特性,能够大大减少代码的冗余,提高代码的可读性和可维护性。通过简化的语法,你可以更加直观地定义对象的属性、方法和动态属性名,同时结合对象解构,你可以高效地提取和赋值对象的属性。这个特性对于处理复杂对象时尤其有帮助。

关键点:

  • 使用 简化属性写法:当属性名和变量名相同时,可以省略重复的部分。
  • 使用 简化方法写法:可以省略 function 关键字,直接写方法名。
  • 使用 动态属性名:可以通过表达式动态设置对象的属性名。
  • 结合 对象解构,提高代码简洁性和易读性。

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

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

相关文章

【C++】智能指针RALL实现shared_ptr

个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 1. 为什么需要智能指针?2. 内存泄漏2.1 什么是内存泄漏,内存泄漏的危害2.2 内存泄漏分类(了解)2.3 如何…

ROS2 开发踩坑记录(持续更新...)

1. 从find_package(xxx REQUIRED)说起,如何引用其他package(包) 查看包的安装位置和include路径详细文件列表 例如,xxx包名为pluginlib # 查看 pluginlib 的安装位置 dpkg -L ros-${ROS_DISTRO}-pluginlib | grep include 这条指令的目的是…

系统思考:困惑源于内心假设

不要怀疑,你的困惑来自你的假设。 你是否曾经陷入过无解的困境,觉得外部环境太复杂,自己的处境无法突破?很多时候,答案并不在于外部的局势,而是来自我们内心深处的假设——那些我们理所当然、从未质疑过的…

GitHub修炼法则:第一次提交代码教学(Liunx系统)

前言 github是广大程序员们必须要掌握的一个技能,万事开头难,如果成功提交了第一次代码,那么后来就会简单很多。网上的相关资料往往都不是从第一次开始,导致很多新手们会在过程中遇到很多权限认证相关的问题,进而被卡…

沥青路面裂缝的目标检测与图像分类任务

文章题目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年发表在《Computer‐Aided Civil and Infrastructure Engineering》 论文采用了一种基于网格分类和基于框的检测(GCBD)&#xff…

【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)

ORM模型 在Flask中,ORM(Object-Relational Mapping,对象关系映射)模型是指使用面向对象的方式来操作数据库的编程技术。它允许开发者使用Python类和对象来操作数据库,而不需要直接编写SQL语句。 核心概念 1. ORM模型…

C/C++滑动窗口算法深度解析与实战指南

C/C滑动窗口算法深度解析与实战指南 引言 滑动窗口算法是解决数组/字符串连续子序列问题的利器,通过动态调整窗口边界,将暴力解法的O(n)时间复杂度优化至O(n)。本文将系统讲解滑动窗口的核心原理、C/C实现技巧及经典应用场景,助您掌握这一高…

Vuex使用指南:状态管理

一、什么是状态管理?为什么需要 Vuex? 1. 状态管理的基本概念 在 Vue 应用中,状态指的是应用中的数据。例如: 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …

【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:大型项目的计划与监控1、写作要点2、解题思路大型信息系统项目的组织制订大型信息系统项目进度计划的方法试题2:组织级项目管理的绩效考核1、写作要点2、解题思路在项目考核过程中会遇到哪些问题项目的…

项目管理学习-CSPM(1)

01引言 最近在学习CSPM的课程,有部分的内容自己还是受益匪浅的,建议有需要提升项目管理能力的同学可以以考促学的方式进行学习,下面整理了一部分内容和大家分享和学习。CSPM全称 China Standards Project Management,中文名项目管…

介绍分治、动态规划、回溯分别是什么?有什么联系和区别?给出对象的场景和java代码?

一、分治算法(Divide and Conquer) 概念: 分治算法是将一个复杂问题分成若干个子问题,每个子问题结构与原问题类似,然后递归地解决这些子问题,最后将子问题的结果合并得到原问题的解。 特点:…

解锁DeepSeek模型微调:从小白到高手的进阶之路

目录 一、DeepSeek 模型初相识二、探秘微调原理2.1 迁移学习基础2.2 微调的参数更新机制 三、数据准备3.1 数据收集3.2 数据标注3.3 数据预处理 四、模型选择与加载4.1 选择合适的预训练模型4.2 加载模型 五、微调训练实战5.1 确定微调策略5.2 设置训练参数5.3 训练过程 六、模…

端到端观测分析:从前端负载均衡到后端服务

前言 我们在做系统运维保障的时候,关注从前端负载均衡到后端服务的流量情况是很有必要的,可以了解每个后端服务实例接收的流量大小,这有助于确定资源分配是否合理,能够帮助找出后端服务中的性能瓶颈。同时,当系统出现…

Ubuntu下OCC7.9+Qt5 快速搭建3D可视化框架

Ubuntu下OCC7.9+Qt5搭建简易的项目框架 近两年国产CAD替代如日中天,而几何内核作为CAD软件的核心组件之一,当前有且仅有唯一开源的几何内核库即OCCT;这里为各位自立于投入CAD开发或正在学习OCC库的小伙伴们奉献上一个快速搭建QT+OCC的项目框架; 本文介绍了Qt5+Occ 显示几何…

C++类与对象—下:夯实面向对象编程的阶梯

9. 赋值运算符重载 9.1 运算符重载 在 C 里,运算符重载能够让自定义类型的对象像内置类型那样使用运算符,这极大地提升了代码的可读性与可维护性。运算符重载本质上是一种特殊的函数,其函数名是 operator 加上要重载的运算符。 下面是运算…

【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

工程师 - 汽车分类

欧洲和中国按字母对汽车分类: **轴距**:简单来说,就是前轮中心点到后轮中心点之间的距离,也就是前轮轴和后轮轴之间的长度。根据轴距的大小,国际上通常把轿车分为以下几类(德国大众汽车习惯用A\B\C\D分类&a…

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…

鼠标悬浮特效:常见6种背景类悬浮特效

鼠标悬浮特效:常见6种背景类悬浮特效 前言背景闪现效果预览代码展示 元素阴影效果预览代码展示 元素悬浮阴影效果预览代码展示 元素上浮阴影效果预览代码展示 元素边框阴影效果预览代码展示 元素卷角效果预览代码展示 结语 前言 在之前的文章中,我们介绍…

[人机交互]理解与概念化交互

零.本章重点(理解和分析用户问题) – 解释“问题空间”的概念和含义 – 解释如何概念化交互 – 描述什么是概念模型 – 讨论将界面隐喻作为概念模型的利弊 – 讨论界面具体化和抽象化各自的优缺点 – 概述概念设计和实际设计的关系 一.理解问题空间 简单…