讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript字符串处理_怎样实现模板拼接

千辰吖_2008

千辰吖_2008

发布时间:2026-01-10 06:23:33

|

541人浏览过

|

来源于php中文网

原创

用反引号的模板字符串替代+拼接是最直接方案,支持变量插值、多行和表达式嵌入,但须防XSS、注意性能及兼容性问题。

javascript字符串处理_怎样实现模板拼接

template literals 替代 + 拼接是最直接的方案

ES6 引入的模板字符串(template literals)用反引号 ` 包裹,支持嵌入表达式 ${...},天然解决多行、变量插值、转义混乱等问题。相比 + 连接或 String.concat(),它更易读、更少出错。

常见错误是误用单引号或双引号包裹模板,导致 ${...} 不被解析——必须用反引号。

  • 变量插值写法:`Hello ${name}, you have ${count} messages`
  • 支持多行:
    `Line 1
    Line 2
    Value: ${x}`
  • 可嵌套表达式:`Total: ${items.reduce((a, b) => a + b.price, 0).toFixed(2)}`
  • 注意:空模板 `` 是合法字符串,但 ${undefined} 会变成字符串 "undefined",需自行判空

需要动态拼接大量字符串时,避免重复创建中间字符串

JavaScript 字符串不可变,每次 + 或模板拼接都会生成新字符串。在循环中高频拼接(如生成 HTML 列表)可能触发内存抖动。

此时应改用数组累积再 .join(''),尤其适用于已知分隔符的场景:

React Flow Implementation
React Flow Implementation

使用 @xyflow/react正确实现 React Flow 节点式用户界面。适用于构建流程图、图表、可视化编辑器或节点式应用程序...

下载

立即学习Java免费学习笔记(深入)”;

  • 错误示范(性能差):
    let html = '';
    for (const item of list) {
      html += `<div>${item.name}</div>`;
    }
  • 推荐写法(高效):
    const parts = [];
    for (const item of list) {
      parts.push(`<div>${item.name}</div>`);
    }
    const html = parts.join('');
  • 若用 map + join 更简洁:list.map(item => `<div>${item.name}</div>`).join('')

处理用户输入或外部数据时,模板拼接必须防 XSS

直接把未过滤的变量插入模板字符串(尤其是 HTML 场景)等于主动引入 XSS 风险。模板字符串本身不提供转义能力,这点常被忽略。

  • 危险示例:`<div>${userInput}</div>` —— 若 userInput<script>alert(1)</script>,就执行了脚本
  • 服务端渲染需用专用转义函数,如 Node.js 的 he.escape();浏览器端可用 DOMPurify.sanitize() 或手动替换:
    function escapeHtml(str) {
      return str
        .replace(/&/g, '&')
        .replace(/</g, '<')
        .replace(/>/g, '>')
        .replace(/"/g, '"')
        .replace(/'/g, '&#039;');
    }
    `<div>${escapeHtml(userInput)}</div>`
  • 框架(React/Vue)自带转义机制,但使用 dangerouslySetInnerHTMLv-html 时仍需手动处理

旧环境兼容性不足时,用 String.prototype.replace 模拟简单模板

若目标环境不支持 ES6(如 IE),又不想引入完整模板引擎,可用 replace 实现键值替换。但仅适合静态键名、无逻辑表达式的场景。

  • 基础实现:
    function simpleTemplate(str, data) {
      return str.replace(/\$\{(\w+)\}/g, (match, key) => data[key] ?? '');
    }
    simpleTemplate('Hello ${name}!', { name: 'Alice' }); // "Hello Alice!"
  • 注意正则中的 \$\{(\w+)\} 必须双反斜杠转义,否则 ${ 会被正则解释为特殊字符
  • 不支持嵌套表达式、函数调用、条件判断,复杂需求请上 lodash.templatemustache
模板拼接看似简单,真正容易翻车的是三处:用了双引号却写 ${}、拼大量内容时不意识性能、往 HTML 里塞变量却忘了转义。这三处比语法本身更值得反复检查。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

265

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

386

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

335

2025.12.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5119

2023.08.02

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2348

2023.11.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1538

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2204

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5704

2023.10.24

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.7万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn