JavaScript 字符串模板 + map 魔法:优雅地把数据变成 HTML 页面

🎭 引言:写代码就像谈恋爱,拼接字符串就像强行凑合

从前有个程序员,他想把数据展示在页面上。

他打开电脑,深吸一口气,开始写:

arduino 复制代码
javascript
深色版本
ul.innerHTML += '<li>' + friend.name + '</li>'; // 哎呀,少个加号
ul.innerHTML += '<li>'+ friend.name +'</li>'; // 哎哟,引号套娃了

他看着满屏的 +',突然意识到一件事:

有些爱情是强求不来的,就像有些代码是不该用拼接的。

就在这时,ES6 轻轻走来,带着两个神器:

  • 字符串模板:多行、换行、变量插入,一气呵成;
  • map 方法:优雅遍历,转换格式,一行搞定;

从此,他的代码不再"硬拼",而是像写诗一样自然,像恋爱一样甜蜜。

第一招:字符串模板 ------ 写 HTML 一样自然

✨ 用反引号 ````` 包裹内容,变量直接 ${} 插进去:

bash 复制代码
`
<li>
  ${friend.name} -
  <i>${friend.hometown}</i>
</li>
`

这写法多舒服?就像你在写 HTML,又像是在写日记,完全不用再担心引号、拼接、换行这些"祖传 bug"。

小贴士:字符串模板还能写函数调用、标签模板。


🧠 第二招:map 方法 ------ 数据变格式,一行搞定

❓ 什么是 map?

简单来说,它就是一个能帮你"把老数据变成新数据"的工具。

比如你有一堆 JSON 数据:

ini 复制代码
const friends = [
  { name: '游志兴', hometown: '花果山' },
  { name: '张升丰', hometown: 'hq的心里' },
  { name: '柳若智', hometown: 'zq的心里' },
  { name: '曾智', hometown: '四海为家' }
];

你想把它们都变成 <li> 标签?那 map 就是你的武器:

bash 复制代码
friends.map(friend => {
  return `
    <li>
      ${friend.name} -
      <i>${friend.hometown}</i>
    </li>
  `;
});

执行完你会发现,原来的数组还在,但你得到了一个全新的 HTML 字符串数组!

特点总结:

  • 不修改原数组;
  • 返回新数组;
  • 超适合做数据转换;
  • 配合模板字符串,简直天作之合!

🧱 合体技:map + join + innerHTML = 页面展示一条龙服务

我们再来完整走一遍流程:

  1. map 把数据转成 HTML 字符串数组;
  2. join('') 把数组合并成完整的 HTML 字符串;
  3. innerHTML 把 HTML 插入页面。
javascript 复制代码
const htmlList = friends.map(friend => {
  return `
    <li>
      ${friend.name} -
      <i>${friend.hometown}</i>
    </li>
  `;
});

document.getElementById('friends').innerHTML = htmlList.join('');

是不是很丝滑?是不是感觉写代码像在写童话?


🤖 对比一下:传统 for 循环 vs 现代写法

方式 写法 感受
传统 for 循环 拼接字符串、一堆加号、容易出错 心态爆炸,太复杂了
现代 map + 模板 结构清晰、变量插入方便 便携易懂,言简意赅

别再让代码看起来像"乱码",用现代写法,让你的代码也能拥有"高颜值"。


🧑‍🏫 补充讲解:forEach ------ 适合执行副作用的遍历方式

在 JavaScript 中,除了 map,我们还有一个非常常用的数组方法:forEach 。它和 map 一样都可以用来遍历数组,但它们之间有一个关键区别:

方法 是否返回新数组 适用场景
map ✅ 是(返回新数组) 转换数据格式,如生成 HTML 字符串
forEach ❌ 否(没有返回值) 执行副作用,比如修改 DOM、打印日志等

🔍 简单用法示例:

javascript 复制代码
friends.forEach(friend => {
  console.log(`${friend.name} 的家乡是 ${friend.hometown}`);
});

这段代码会依次输出每个朋友的名字和家乡,但它不会返回任何值。


💡 什么时候用 forEach

当你不需要把整个数组"转换"成一个新的数组,而只是想对每一项做一些操作时,就可以选择 forEach

例如,直接操作 DOM:

ini 复制代码
const ul = document.getElementById('friends');
friends.forEach(friend => {
  const li = document.createElement('li');
  li.innerHTML = `${friend.name} - <i>${friend.hometown}</i>`;
  ul.appendChild(li);
});
  • appendChild 的意思是"把某个元素添加为子元素"。
  • 现在,你做的这个 <li> 终于被放进页面上的 <ul> 列表中了。
  • 就像你终于把那个装好内容的盒子,放进了"friends"货架里。

这种方式虽然也能实现页面渲染,但不像 map 那样结构清晰、逻辑分离。你可以把它理解为一种"边走边建"的方式。


⚖️ map vs forEach:选哪个更合适?

对比维度 map forEach
返回值 新数组 没有返回值
是否改变原数组 不会 不会
可链式调用 可以 不建议
是否适合做数据转换 推荐 不推荐
是否适合做副作用(如 DOM 操作) 不太推荐 推荐

小贴士:如果你只是想"展示数据",用 map + join('') 更加结构清晰;

如果你想"立刻操作 DOM"或"触发一些动作",那 forEach 更合适。


🧩 总结一句话:

map 更擅长"转换数据",forEach 更适合"执行副作用"。了解它们的使用场景,才能写出既优雅又实用的代码。


现在你已经掌握了三种现代 JS 中处理数组的重要方式:

  • 使用 字符串模板 写 HTML 结构不再拼接;
  • 使用 map 把数据变成新的数组,结构清晰;
  • 使用 forEach 做一些"现场动作",比如直接操作 DOM。

下次写代码的时候,别再用老式的 for 循环拼接字符串啦,试试这些现代写法,让你的代码也拥有"高颜值 + 高智商"!

相关推荐
前端百草阁1 小时前
JavaScript 模块系统:CJS/AMD/UMD/ESM
javascript·ecmascript
打小就很皮...1 小时前
简单实现Ajax基础应用
前端·javascript·ajax
wanhengidc2 小时前
服务器租用:高防CDN和加速CDN的区别
运维·服务器·前端
哆啦刘小洋3 小时前
HTML Day04
前端·html
再学一点就睡3 小时前
JSON Schema:禁锢的枷锁还是突破的阶梯?
前端·json
保持学习ing4 小时前
帝可得 - 设备管理
javascript·vue.js·elementui
从零开始学习人工智能5 小时前
FastMCP:构建 MCP 服务器和客户端的高效 Python 框架
服务器·前端·网络
烛阴5 小时前
自动化测试、前后端mock数据量产利器:Chance.js深度教程
前端·javascript·后端
好好学习O(∩_∩)O5 小时前
QT6引入QMediaPlaylist类
前端·c++·ffmpeg·前端框架
敲代码的小吉米5 小时前
前端HTML contenteditable 属性使用指南
前端·html