当前位置: 首页 > news >正文

从0开始学习JavaScript--JavaScript 模板字符串的全面应用

JavaScript 模板字符串是 ES6 引入的一项强大特性,它提供了一种更优雅、更灵活的字符串拼接方式。在本文中,将深入探讨模板字符串的基本语法、高级用法以及在实际项目中的广泛应用,通过丰富的示例代码带你领略模板字符串的魅力。

模板字符串的基本语法

模板字符串使用反引号 `(grave accent) 包裹,可以在字符串中嵌入变量、表达式,并支持多行字符串。

const name = 'John';
const age = 30;// 基本用法
const greeting = `Hello, my name is ${name} and I am ${age} years old.`;// 多行字符串
const multiLine = `This is amulti-linestring.`;

在上述例子中,使用 ${} 语法嵌入变量和表达式,同时使用模板字符串实现了多行字符串的简洁表示。

模板字符串中的表达式

模板字符串不仅可以包含变量,还可以嵌入 JavaScript 表达式,使得字符串拼接更加灵活。

const a = 5;
const b = 10;const result = `The sum of ${a} and ${b} is ${a + b}.`;

这样的写法使得在字符串中执行简单的运算变得更为便捷。

模板字符串的标签函数

模板字符串可以通过标签函数进行处理,提供了在字符串插值时进行自定义操作的机会。

function upper(strings, ...values) {let result = '';for (let i = 0; i < strings.length; i++) {result += strings[i];if (i < values.length) {result += values[i].toUpperCase();}}return result;
}const name = 'John';
const age = 30;const result = upper`Hello, my name is ${name} and I am ${age} years old.`;

在这个例子中,upper 函数会将插入的变量转为大写。标签函数能够在字符串插值时执行自定义逻辑,增加了字符串处理的灵活性。

模板字符串在函数中的应用

模板字符串在函数中的应用不仅限于字符串拼接,还可以优雅地处理 HTML 模板、生成动态 SQL 查询等。

HTML 模板

function createCard(user) {return `<div class="card"><h2>${user.name}</h2><p>Email: ${user.email}</p></div>`;
}const user = { name: 'John Doe', email: 'john@example.com' };
const card = createCard(user);

在这个例子中,createCard 函数使用模板字符串生成一个用户信息卡片的 HTML 结构,使得代码更为清晰和易读。

动态 SQL 查询

function createSQLQuery(filters) {const conditions = Object.keys(filters).map(key => `${key} = '${filters[key]}'`);return `SELECT * FROM table WHERE ${conditions.join(' AND ')};`;
}const filters = { name: 'John', age: 30 };
const query = createSQLQuery(filters);

在这个例子中,createSQLQuery 函数使用模板字符串生成动态 SQL 查询语句,根据传入的过滤条件动态构建查询条件。

模板字符串的实际应用场景

1. React 组件的 JSX

在React开发中,模板字符串在JSX中的应用非常广泛,使得组件的渲染更加灵活。

function Greeting({ name }) {return (<div>{`Hello, ${name}!`}</div>);
}

2. 多语言支持

模板字符串方便地处理多语言字符串,使得国际化变得更加容易。

const messages = {en: 'Hello!',es: '¡Hola!',fr: 'Bonjour!'
};function greet(language) {return `Greeting: ${messages[language]}`;
}const englishGreeting = greet('en');

3. 避免 HTML 拼接

在传统的字符串拼接中,HTML 结构往往需要通过字符串拼接完成,而使用模板字符串能够更清晰地表示 HTML 结构。

function createHTML() {const title = 'Welcome to My Website';const content = 'This is the content of the website.';return `<html><head><title>${title}</title></head><body><div>${content}</div></body></html>`;
}

模板字符串进阶应用

1. 模板字符串在网络请求中的使用

在进行网络请求时,模板字符串可以方便地构建动态的URL或请求体。

const baseURL = 'https://api.example.com';
const endpoint = 'users';
const userId = 123;const url = `${baseURL}/${endpoint}/${userId}`;fetch(url).then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));

在这个例子中,通过模板字符串拼接不同部分的URL,使得代码更具可读性,同时保持了代码的动态性。

2. 模板字符串在动态样式中的应用

在前端开发中,经常需要根据一些动态数据来设置元素的样式,模板字符串为此提供了便捷的方式。

const textColor = 'red';
const fontSize = '16px';const dynamicStyle = `color: ${textColor};font-size: ${fontSize};
`;const element = document.getElementById('myElement');
element.style.cssText = dynamicStyle;

使用模板字符串,我们可以更清晰地定义动态样式,使得样式的控制更为灵活。

3. 模板字符串与标签函数的创造性结合

结合标签函数,模板字符串能够进行更创造性的操作,例如实现一个简单的国际化方案。

const language = 'es';function i18n(strings, ...values) {const translations = {en: { greeting: 'Hello', farewell: 'Goodbye' },es: { greeting: 'Hola', farewell: 'Adiós' },};let result = '';strings.forEach((string, i) => {result += string + (translations[language][values[i]] || '');});return result;
}const greeting = i18n`The greeting is: ${'greeting'}`;
const farewell = i18n`The farewell is: ${'farewell'}`;console.log(greeting); // 输出: The greeting is: Hola
console.log(farewell); // 输出: The farewell is: Adiós

在这个例子中,i18n 标签函数接收字符串和变量,根据当前语言从翻译对象中提取对应的翻译,实现了简单的国际化效果。

模板字符串的性能考虑

尽管模板字符串提供了更灵活的字符串拼接方式,但在大量字符串拼接时,性能问题可能需要考虑。

// 不好的实践
let result = '';
for (let i = 0; i < 10000; i++) {result += `Item ${i}, `;
}// 好的实践
const items = [];
for (let i = 0; i < 10000; i++) {items.push(`Item ${i}`);
}
const result = items.join(', ');

在大规模的循环中,使用数组的 push 方法结合 join 操作通常比直接拼接字符串更高效。这是因为每次字符串拼接都会创建一个新的字符串对象,而使用数组可以避免这个性能开销。

总结

JavaScript 模板字符串不仅提供了基本的字符串拼接功能,还在各种场景下展现了强大的应用能力。从网络请求到动态样式,再到创造性的国际化方案,模板字符串都能够让代码更为优雅、灵活,并提高开发效率。

然而,在性能要求较高的场景,需要谨慎使用模板字符串,考虑使用其他更为高效的方式,例如数组的 pushjoin 操作。

希望这篇文章帮助大家更全面地理解和运用 JavaScript 模板字符串。

相关文章:

从0开始学习JavaScript--JavaScript 模板字符串的全面应用

JavaScript 模板字符串是 ES6 引入的一项强大特性&#xff0c;它提供了一种更优雅、更灵活的字符串拼接方式。在本文中&#xff0c;将深入探讨模板字符串的基本语法、高级用法以及在实际项目中的广泛应用&#xff0c;通过丰富的示例代码带你领略模板字符串的魅力。 模板字符串…...

开源 vs 闭源:数字化时代的技术选择

开源 vs 闭源&#xff1a;数字化时代的技术选择 近期&#xff0c;特斯拉CEO马斯克的一番言论引起了广泛关注&#xff1a;OpenAI不该闭源&#xff0c;自家首款聊天机器人将开源。这引发了人们对于开源与闭源软件的辩论&#xff0c;这一话题在技术界一直是热门的讨论焦点。在数字…...

Spring Boot项目Service类单元测试自动生成

在Spring Boot项目中&#xff0c;对Service类进行单元测试对于开发工程师而言具有重大意义和作用&#xff1a; 验证业务逻辑的正确性和完整性 核心业务逻辑的准确实现&#xff1a;Service类通常包含核心业务逻辑。单元测试确保这些逻辑被正确实现&#xff0c;满足业务需求。处…...

Typescript中 interface 和 type 的区别是什么?

在 TypeScript 中&#xff0c;interface 和 type 都用于定义类型&#xff0c;但它们有一些区别。 1. 语法差异&#xff1a; interface 关键字用于声明接口&#xff0c;使用 interface 可以定义对象的形状、函数的签名等。 type 关键字用于声明类型别名&#xff0c;可以给一个…...

W2311294-万宾科技可燃气体监测仪怎么进行数据监测

万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源&#xff0c;它已经渗透到城市生活的方方面面&#xff0c;对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…...

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者&#xff1a;Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户&#xff0c;请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…...

704 二分查找 day1

class Solution { public: int search(vector<int>& nums, int target) { int left 0; int right nums.size() - 1; // 定义target在左闭右闭的区间里&#xff0c;[left, right] while (left < right) { // 当leftright&#xff0c;区间[left, right]依然有效&…...

Python面试破解:return和yield的细腻差别

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python面试破解&#xff1a;return和yield的细腻差别&#xff0c;全文3000字&#xff0c;阅读大约10钟。 在Python的函数编程中&#xff0c;return和yield是两个常用的关键词…...

云时空社会化商业 ERP 系统 service SQL 注入漏洞复现

0x01 产品简介 时空云社会化商业ERP&#xff08;简称时空云ERP&#xff09; &#xff0c;该产品采用JAVA语言和Oracle数据库&#xff0c; 融合用友软件的先进管理理念&#xff0c;汇集各医药企业特色管理需求&#xff0c;通过规范各个流通环节从而提高企业竞争力、降低人员成本…...

Vue3-Pinia

Pinia是什么 Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 比Vuex更大的优势在于&#xff1a; 1.提供更加简单的API&#xff08;去掉了mutation&#xff09; 2.提供符合&#xff0c;组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3.去掉了modules…...

数据挖掘之时间序列分析

一、 概念 时间序列&#xff08;Time Series&#xff09; 时间序列是指同一统计指标的数值按其发生的时间先后顺序排列而成的数列&#xff08;是均匀时间间隔上的观测值序列&#xff09;。 时间序列分析的主要目的是根据已有的历史数据对未来进行预测。 时间序列分析主要包…...

iOS NSDate的常用API

目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…...

谱方法学习笔记-下(超详细)

谱方法学习笔记&#x1f4d2; 谱方法学习笔记-上(超详细) 声明&#xff1a;鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式&#xff0c; KaTeX \KaTeX KATE​X 与 L a T e X LaTeX LaTeX 不同&#xff0c;不支持直接的交叉引用命令&#xff0c;如\label和\eqref。 KaTeX \KaT…...

iOS--UIPickerView学习

UIPickerView 使用场景和功能UIPickerView遵循代理协议和数据源协议创建对象&#xff0c;添加代理必须实现的代理方法非必要实现的方法demo用到的其他函数提示 效果展示 使用场景和功能 UIPickerView 最常见的用途是作为选项选择器&#xff0c;允许用户从多个选项中选择一个。…...

Docker安装Elasticsearch以及ik分词器

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心&#xff0c;Elasticsearch 会集中存储您的数据&#xff0c;让您飞快完成搜索&#xff0c;微调相关性&#xff0c;进行强大的分析&#xff…...

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 &#xff08;1&#xff09;软件架构设计&#xff08;层次划分、模块划分、职责分工&#xff09;&#xff1a; &#xff08;2&#xff09;软件高层设计、概要设计…...

centos7上源码安装mysql--运维高级

第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…...

Linux小程序之进度条

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;自己能实现进度条 > 毒鸡汤&#xff1a; > …...

Grafana采用Nginx反向代理

一、场景介绍 在常规操作中&#xff0c;一般情况下不会放开许多端口给外部访问&#xff0c;特别是直接 ip:port 的方式开放访问。但是 Grafana 的请求方式在默认情况下是没有任何规律可寻的。 为了满足业务需求&#xff08;后续通过 Nginx 统一一个接口暴露 N 个服务&#xf…...

Python接口自动化测试如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

Kafka 消息模式实战:从简单队列到流处理(一)

一、Kafka 简介 ** Kafka 是一种分布式的、基于发布 / 订阅的消息系统&#xff0c;由 LinkedIn 公司开发&#xff0c;并于 2011 年开源&#xff0c;后来成为 Apache 基金会的顶级项目。它最初的设计目标是处理 LinkedIn 公司的海量数据&#xff0c;如用户活动跟踪、消息传递和…...

Prompt工程学习之思维树(TOT)

思维树 定义&#xff1a;思维树&#xff08;Tree of Thoughts, ToT&#xff09; 是一种先进的推理框架&#xff0c;它通过同时探索多条推理路径对思维链&#xff08;Chain of Thought&#xff09;** 进行了扩展。该技术将问题解决视为一个搜索过程 —— 模型生成不同的中间步骤…...