详细介绍:JavaScript学习笔记(十五):ES6模板字符串使用指南

news/2025/10/25 21:42:37/文章来源:https://www.cnblogs.com/wzzkaifa/p/19166017

ES6模板字符串详解

ES6引入了模板字符串(Template Literals),使用反引号(`)包裹内容,支持多行文本和表达式嵌入。

  • 基本语法
    普通字符串需用引号包裹,而模板字符串使用反引号:

    const name = 'Alice';
    const greeting = `Hello, ${name}!`; // 输出: Hello, Alice!

  • 表达式嵌入
    通过${expression}语法嵌入变量或表达式:

    const a = 5;
    const b = 10;
    console.log(`Sum: ${a + b}`); // 输出: Sum: 15

  • 多行文本
    直接换行即可实现多行字符串,无需\n

    const multiLine = `Line 1Line 2
    `;

  •  标签模板
    通过自定义函数处理模板字符串,函数接收字符串部分和表达式部分:

    function highlight(strings, ...values) {return strings.reduce((result, str, i) =>`${result}${str}${values[i] || ''}`, '');
    }
    const name = 'Alice';
    const age = 25;
    console.log(highlight`Name: ${name}, Age: ${age}`);
    // 输出: Name: Alice, Age: 25

  • 原始字符串
    通过String.raw或标签函数的第一个参数(raw属性)获取原始字符串内容,忽略转义字符:

    const path = String.raw`C:\Development\file.txt`;
    console.log(path); // 输出: C:\Development\file.txt
    function showRaw(strings) {console.log(strings.raw[0]);
    }
    showRaw`Line 1\nLine 2`; // 输出: Line 1\nLine 2
  •  嵌套模板
    模板字符串可以嵌套使用,适合动态生成复杂结构:

    const items = ['apple', 'banana', 'cherry'];
    const listHtml = `
      ${items.map(item => `
    • ${item}
    • `).join('')}
    `;


应用场景

  • 动态拼接字符串
    替代传统字符串拼接(+运算符),提升可读性:

    const user = { name: 'Bob', age: 25 };
    const message = `User: ${user.name}, Age: ${user.age}`;

  • HTML模板生成
    结合DOM操作动态生成HTML:

    const items = ['Apple', 'Banana'];
    const html = `
      ${items.map(item => `
    • ${item}
    • `).join('')}
    `;

  • SQL查询拼接
    需注意安全风险,避免SQL注入(建议使用参数化查询):

    const table = 'users';
    const query = `SELECT * FROM ${table} WHERE id = ${userId}`;

  • 国际化(i18n)
    动态替换多语言文本中的变量:

    const i18n = { welcome: 'Hello, {name}!' };
    const text = i18n.welcome.replace('{name}', 'Charlie');

  • 与其他ES6特性的结合
    模板字符串常与解构赋值、箭头函数等特性结合使用,提升代码可读性。

    const user = { name: 'Bob', age: 30 };
    const greet = ({ name }) => `Hello, ${name}!`;
    console.log(greet(user)); // 输出:Hello, Bob!


注意事项

  • 反引号转义
    若需在模板字符串中使用反引号,需通过\转义:

    const str = `This is a \`backtick\``;

  • 表达式求值
    ${}内可以是任意JavaScript表达式,但需避免复杂逻辑:

    // 不推荐
    const complex = `Result: ${(() => { return 42; })()}`;

  • 性能考虑
    频繁拼接大量字符串时,传统数组join()可能更高效。

  • XSS风险
    动态生成HTML时需对用户输入转义,防止XSS攻击:

    const safeHtml = `
    ${escapeHtml(userInput)}
    `;


优化建议

  • 缓存模板字符串
    重复使用的模板可提前定义:

    const getGreeting = name => `Hello, ${name}!`;

  • 标签模板(Tagged Templates)
    自定义模板处理逻辑,如过滤、国际化等:

    function highlight(strings, ...values) {return strings.reduce((result, str, i) =>`${result}${str}${values[i] || ''}`, '');
    }
    const output = highlight`Name: ${user.name}`;

  • 避免嵌套过深
    复杂逻辑建议拆分为函数调用:

    const getDetails = (user) => `${user.name} (${user.age})`;
    const message = `Details: ${getDetails(user)}`;


浏览器兼容性处理

ES6模板字符串在现代浏览器中广泛支持,旧环境需通过Babel等工具转译:

// Babel转译前的模板字符串
const name = 'Alice';
const greeting = `Hello, ${name}!`;
// 转译为ES5代码后:
var name = 'Alice';
var greeting = 'Hello, ' + name + '!';


总结

ES6模板字符串通过反引号和${}语法简化了字符串拼接,支持多行文本和动态表达式,适用于HTML生成、SQL拼接、国际化等场景。需注意转义、性能及安全问题,结合标签模板和缓存机制可进一步提升代码质量。

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

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

相关文章

Python毕业设计实例-基于python养老社区的查询预约架构(源码+LW+部署文档+全bao+远程调试+代码讲解等)

Python毕业设计实例-基于python养老社区的查询预约架构(源码+LW+部署文档+全bao+远程调试+代码讲解等)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

第5天(中等题 滑动窗口、逆向思维)

打卡第五天 两道中等题题1423.可获得的最大点数思路: n 表示数组总数,先算出数组总和,用滑动窗口选出剩下连续(n-k)个数的最小和,用总和-剩余数最小和,即得拿走数的最大值.(逆向思维,正难则反) 耗时≈一小时 明天继续

Meet in the middle 学习笔记

由于蒟蒻在模拟赛写 DFS 挂掉了,所以来学 Meet in the middle 。 「引入」 Meet in the middle 算法没有正式译名,常见的翻译为「折半搜索」、「双向搜索」或「中途相遇」,以下称折半搜索。 它适用于输入数据较小,…

华为堡垒机

1、打开了VM虚拟机,导入相关的.ovf文件2、导入成功之后,不要直接开机。添加1块硬盘、网卡后再开机 3、开机之后,默认的用户为coreshell,密码为Admin@123 初次登录会提示更改密码密码: 请更改控制台密码,因为首次登…

[HZOI] CSP-S模拟38 赛后总结

不予置评[HZOI] CSP-S模拟38 赛后总结 不予置评 T1:最小生成树(tree) #include<bits/stdc++.h> #define lid (id << 1) #define rid (id << 1 | 1) #define Blue_Archive return 0 #define int lo…

集合常见操作示例

集合(Set)是数学和编程中常用的数据结构,用于存储唯一元素(无重复值)。以下是集合的常见操作及其示例,涵盖数学集合和编程实现(以Python为例):1. 创建集合数学表示:A = {1, 2, 3} Python示例:A = {1, 2, 3}…

深入解析:港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。

深入解析:港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

虚拟机下 安装 ubuntu 18.04

VMware虚拟机中安装Ubuntu18.04(linux发行版)【超详细图文教程】_vmware安装ubuntu18.04-CSDN博客

MinIO快速入门

MinIO快速入门1. MinIO 介绍 MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户。高性能 ,在标准硬件上,读/写速度上高达 183GB/秒和 171GB/秒,拥有更高的吞吐量和更低的延迟 可扩展性 ,为对象存储带来…

实用指南:【代码的暴力美学】-- C语言基础编程题_1

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

路径规划算法学习Day2:广度优先搜索算法(BFS)

路径规划算法学习Day2:广度优先搜索算法(BFS)前言 如果我想要用一群人来走迷宫,人的总数确定,从一点出发,每到一个节点就分出去一个人,那么我就可以根据要探索的层的数量来判断实际所需要的人数,应该是呈现一个…

集合与列表有何不同的使用场景,如何选择?

在Python中,集合(set)和列表(list)是两种不同的数据结构,各自有独特的使用场景和特性。选择它们的关键在于是否需要唯一性、顺序性或高效的查找/修改操作。以下是详细对比和选择建议:1. 核心特性对比特性 列表(…

102302147傅乐宜作业1

1.用requests和BeautifulSoup库方法爬取大学排名信息 内容 核心代码:点击查看代码 import urllib.request from bs4 import BeautifulSoupurl = http://www.shanghairanking.cn/rankings/bcur/2020 response = urllib…

完整教程:ros_control 中 hardware_interface 教程

完整教程:ros_control 中 hardware_interface 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

飞牛NAS的SSL证书过期,又开启了强制HTTPS,进不去界面修改SSL怎么办? - 详解

飞牛NAS的SSL证书过期,又开启了强制HTTPS,进不去界面修改SSL怎么办? - 详解2025-10-25 21:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow…

多表查询-练习

-- 多表查询-练习1 -- 1.查询员工的姓名、年龄、职位、部门信息。(隐式内连接) select e.name,e.age,e.job,d.* from emp e ,dept d where e.dept_id = d.id; -- 2.查询年龄小于30岁的员工姓名、年龄、职位、部门信息。…

多智能体大模型在农业中的应用研究与展望

研究意义 首次系统提出“多智能体 大语言模型”在农业中的完整技术框架,为“耕-种-管-收”全流程智能化、无人化提供理论+落地路线。 技术框架• 多智能体系统(MAS)=“角色分工 + 动态协作 + 分布式决策”。 • 大…

嵌入式基础作业--第七周--IIC协议采集温湿度与OLED显示

任务一. 解释什么是“软件I2C”和“硬件I2C” 根据野火教材第23章"IC--读写EEPROM"的内容,详细解释软件I2C和硬件I2C的概念和区别: I2C总线基础 I2C(Inter-Integrated Circuit)是一种两线式串行总线,包…

Nature子刊 | 基于生物学信息的神经网络

机器学习模型在多组学数据中的应用常常需要在预测准确性与生物学可解释性之间进行权衡。一种新兴的深度学习架构通过结构化地编码生物学知识,以提升预测能力和可解释性。然而,更广泛地采用这种架构仍面临着机遇与挑战…

2025年项目总延期?这30款项目进度管理软件一定有一款适合你!

项目总延期是困扰团队效率的常见难题,但选对工具能让交付率提升至85%以上。本文将为您精选30款高效的项目进度管理软件,覆盖从敏捷开发到传统瀑布模型的不同需求。无论是Codes的全流程管控、Jira的敏捷适配性,还是T…