从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 a
  multi-line
  string.`;

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

模板字符串中的表达式

模板字符串不仅可以包含变量,还可以嵌入 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 模板字符串。

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

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

相关文章

MySQL InnoDB Cluster

MySQL InnoDB Cluster 一、InnoDB Cluster 基本概述 MySQL InnoDB Cluster 为 MySQL 提供了一个完整的高可用解决方案。通过使用 MySQL Shell 提供的 AdminAPI,你可以轻松地配置和管理一组至少由3个MySQL服务器实例组成的 InnoDB 集群。 InnoDB 集群中的每个 MySQL 服务器实例…

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

基于Java SSM框架实现KTV点歌系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现KTV点歌系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个KTV点歌系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述KTV点歌系…

手动创建映像及在OpenStack云计算平台的镜像应用

目录 一、下载 rhel7.6 安装ISO 二、在VMware 的虚拟机内创建虚拟机 三、更改一些设置 1、使用httpd暴露&#xff08;在外部虚拟机&#xff09; 2、添加软件仓库 3、 安装 ACPI 服务 4、使用 cloud-init 获取公钥 5、安装 cloud-utils-growpart 以允许调整分区大小 6、…

面试:说一下深拷贝,浅拷贝,引用拷贝吧;Object类中的clone是哪种呢?

目录 深拷贝、浅拷贝、引用拷贝Object类的clone()方法 深拷贝、浅拷贝、引用拷贝 ● 浅拷贝&#xff1a; 对基本数据类型进行值传递&#xff1b; 对引用类型&#xff0c;复制了一份引用类型的变量 里面存储的内存地址一样 指向的对象也一样。 ● 深拷贝&#xff1a;对基本数据…

postgres在docker中使用

记录个人开发过程中postgres在docker中的使用&#xff0c;以便后续查看。 Dockerfile 个人是在M1电脑上开发&#xff0c;所以platform使用linux/amd64来兼容amd芯片。 FROM --platformlinux/amd64 postgres:16.1-alpine COPY ./poetrydb.sql /docker-entrypoint-initdb.d/po…

Java多线程核心技术一-基础篇synchronzied同步语句块

接上篇&#xff1a;Java多线程核心技术二-synchronzied同步方法 1 概述 用synchronzied关键字声明方法在某些情况下是有弊端的&#xff0c;比如A线程调用同步方法执行一个长时间的任务&#xff0c;那么B现成就要等待比较长的时间&#xff0c;此时可以使用synchronzied同步语句…

nexus 制品库管理

目录 一、nexus 介绍 二、nexus 支持的仓库 三、nexus 部署 四、nexus 数据备份 五、创建一个内网yum源 六、创建一个代理yum仓库 七、jenkins 使用 nexus插件 7.1 jenkins 安装插件 7.2 配置 maven 工程 7.3 查看构建和上传 一、nexus 介绍 Nexus 是一个强大的仓库管…

Linux创建与编辑视图

本博客将会详细讲解如何在Linux中如何编辑配置文件 输出重定向 对于一台设备而言&#xff0c;存在着两种设备&#xff0c;分别负责输入与输出&#xff1a; 显示器&#xff08;输出设备>&#xff09; 与 键盘&#xff08;输入设备<&#xff09; 对于Linux系统而言&#…

存储过程与触发器的练习题

1&#xff0e;实验目的 掌握使用SQL Server管理平台和Transact-SQL语句创建存储过程、执行存储过程、修改存储过程、删除存储过程的用法。理解使用SQL Server管理平台和Transact-SQL语句查看存储过程定义、重命名存储过程的用法。掌握通过SQL Server管理平台和Transact-SQL语句…

【古月居《ros入门21讲》学习笔记】18_常用可视化工具的使用

目录 说明&#xff1a; 1. Qt工具箱 日志输出工具&#xff1a;rqt_console 绘制数据曲线&#xff1a;rqt_plot 图像渲染工具&#xff1a;rqt_image_view 综合工具&#xff1a;rqt 2. 三维可视化工具&#xff1a;Rviz Rviz启动 使用示例 3. 仿真平台&#xff1a;Gazebo…

通用plantuml模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

004:Direct 2D离屏渲染(Qt中实现)

简介&#xff1a; 用QT开发图像显示的小程序&#xff0c;需要一些标注工具&#xff0c;由于用的是opengl渲染&#xff0c;所以就在内存中进行绘制&#xff0c;然后纹理贴图贴出去&#xff0c;发现Qt绘制的效果太差&#xff0c;且速度一般&#xff0c;于是就想着用direct2d来绘制…

MySQL根据binlog恢复数据

简介 本文介绍了使用mysqlbinlog导出数据&#xff0c;根据binlog恢复数据&#xff0c;和导出数据时报需要super权限的解决方法。 环境 MySQL: 5.7.40 说明 MySQL的binlog是数据库服务器在运行过程中产生的日志文件&#xff0c;记录了数据库增删改的操作&#xff0c;可用于恢复和…

leetcode二叉树

下面的两个题呢是比较类似的所以放在一起讲&#xff0c;更好的理解起来。 https://leetcode.cn/problems/same-tree/description/ 这个题就是比较两颗树是不是一样的&#xff0c;这个其实看起来就只要比较当前节点&#xff0c;我们分析成子问题就是判断两颗树当前节点是不是一致…

Java实现动态加载的逻辑

日常工作中我们经常遇到这样的场景&#xff0c;某某些逻辑特别不稳定&#xff0c;随时根据线上实际情况做调整&#xff0c;比如商品里的评分逻辑&#xff0c;比如规则引擎里的规则。 常见的可选方案有: JDK自带的ScriptEngine 使用groovy&#xff0c;如GroovyClassLoader、Gro…

《尚品甄选》:后台系统——分类品牌和规格管理(debug一遍)

文章目录 一、分类品牌管理1.1 表结构介绍1.2 列表查询1.3 添加功能1.4 修改功能1.5 删除功能 二、商品规格管理2.1 表结构介绍2.2 列表查询2.3 添加功能2.4 修改功能2.5 删除功能 一、分类品牌管理 分类品牌管理就是将分类的数据和品牌的数据进行关联&#xff0c;分类数据和品…

48、Flink DataStream API 编程指南(1)- DataStream 入门示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Web安全漏洞分析-XSS(中)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题&#xff0c;去微信公众平台&#xff08;小程序&#xff09;上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件&#xff0c;就会发现控制台报错了&#xff0c;会提示一个https什么不在ip白名单&#xff0c;复制那个网址 2、…