🎭 引言:写代码就像谈恋爱,拼接字符串就像强行凑合
从前有个程序员,他想把数据展示在页面上。
他打开电脑,深吸一口气,开始写:
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 = 页面展示一条龙服务
我们再来完整走一遍流程:
- map 把数据转成 HTML 字符串数组;
- join('') 把数组合并成完整的 HTML 字符串;
- 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
循环拼接字符串啦,试试这些现代写法,让你的代码也拥有"高颜值 + 高智商"!