前端新手必看:ES6字符串模板与数组map,让你的JS代码优雅到起飞 作为刚入门JS的新手,你是否遇到过这些困扰? - 拼接长字符串时被`+`号绕到

作为刚入门JS的新手,你是否遇到过这些困扰?

  • 拼接长字符串时被+号绕到头晕?
  • 想生成HTML列表却对着for循环无从下手? 别慌!ES6(ECMAScript 2015)带来的字符串模板数组map方法 ,能完美解决这些问题。本文结合d:\lesson_si\vibe\js\es6文件夹中的示例代码,用最通俗的语言带你理解这两个"新手友好型"特性。

一、字符串模板:告别拼接地狱

1. 新手的痛:ES5的字符串拼接

在ES6之前,拼接复杂字符串只能用+号。比如,想输出"我的狗叫旺财,今年14岁了"(假设狗的年龄是人类年龄的7倍),代码是这样的:

ini 复制代码
const name = '旺财';
const age = 2;
const sentence = '我的狗叫' + name + ',今年' + (age * 7) + '岁了';
console.log(sentence); // 输出:我的狗叫旺财,今年14岁了

看起来简单?但如果字符串很长(比如拼接HTML标签),代码会变成这样:

arduino 复制代码
const user = { name: '张三', age: 18, city: '北京' };
const html = '<div class="user-info">' + 
             '<p>姓名:' + user.name + '</p>' + 
             '<p>年龄:' + user.age + '</p>' + 
             '<p>城市:' + user.city + '</p>' + 
             '</div>';

每加一行都要小心+号和引号,稍有不慎就会报错,新手很容易崩溃。

2. ES6字符串模板:用反引号打开新世界

ES6引入了字符串模板 (Template String),用反引号`````代替普通引号,支持:

  • 直接插入变量(用${}包裹)
  • 保留换行格式
  • 支持表达式计算

看看用模板字符串重写上面的例子:

ini 复制代码
const name = '旺财';
const age = 2;
// 用反引号包裹,变量用${}插入,表达式直接写在{}里
const sentence = `我的狗叫${name},今年${age * 7}岁了`; 
console.log(sentence); // 输出:我的狗叫旺财,今年14岁了

如果是拼接HTML,更爽!比如生成用户信息卡片:

css 复制代码
const user = { name: '张三', age: 18, city: '北京' };
const html = `
  <div class="user-info">
    <p>姓名:${user.name}</p>
    <p>年龄:${user.age}</p>
    <p>城市:${user.city}</p>
  </div>
`;

代码结构和最终HTML完全一致,换行和缩进都保留,再也不用数+号了!

3. 实战场景:动态生成DOM

d:\lesson_si\vibe\js\es6\2.html中,有一个用字符串模板生成列表的例子:

xml 复制代码
<ul id="friends"></ul>
<script>
  const friends = [
    {name: '娄欢', hometown: '抚州'},
    {name: '王心志', hometown: '上饶'},
    {name: '刘福洲', hometown: '赣州'}
  ];
  const ul = document.querySelector('#friends');
  // 用字符串模板生成li标签
  ul.innerHTML = friends.map(friend => `
    <li>
      ${friend.name} - 
      <i>${friend.hometown}</i>
    </li>
  `).join('');
</script>

这里结合了另一个ES6特性map,我们马上来学!


二、数组map方法:数据转换的"魔法工厂"

1. 从需求出发:如何把数据数组转成HTML数组?

假设你有一个存储朋友信息的数组(如上面的friends),需要把它变成<li>标签的数组,传统做法是用for循环

ini 复制代码
const friends = [/* 数据数组 */];
const liArray = [];
for (let i = 0; i < friends.length; i++) {
  liArray.push(`<li>${friends[i].name} - ${friends[i].hometown}</li>`);
}

代码冗余且容易出错,尤其是新手可能忘记初始化数组或推错变量。

2. ES6的map:一行代码完成转换

ES6为数组新增了map方法,它的作用是:遍历数组每一项,用回调函数处理后返回新数组。简单说,就是"输入一个数组,输出一个经过处理的新数组"。

语法:

ini 复制代码
const newArray = oldArray.map(function(item) {
  return 处理后的新值;
});

map重写上面的例子:

javascript 复制代码
const friends = [
  {name: '娄欢', hometown: '抚州'},
  {name: '王心志', hometown: '上饶'},
  {name: '刘福洲', hometown: '赣州'}
];
// 用map将每个朋友对象转成li字符串
const liArray = friends.map(friend => {
  return `<li>${friend.name} - <i>${friend.hometown}</i></li>`;
});
// liArray 变成:["<li>娄欢 - <i>抚州</i></li>", ...]

3. 结合字符串模板:代码优雅到尖叫

注意到前面的2.html示例吗?它直接把map和字符串模板结合,一行代码完成数据到HTML的转换:

bash 复制代码
ul.innerHTML = friends.map(friend => `
  <li>
    ${friend.name} - 
    <i>${friend.hometown}</i>
  </li>
`).join('');
  • friends.map(...):将每个friend对象转成<li>字符串,得到一个字符串数组。
  • .join(''):将数组中的字符串用空字符连接,变成一个完整的HTML字符串。
  • 最后赋值给ul.innerHTML,直接渲染到页面!

4. map vs forEach:新手最易混淆的点

新手常问:"mapforEach有什么区别?"记住关键:

  • forEach:单纯遍历数组,没有返回值(或返回undefined),适合需要"执行操作"的场景(如打印日志)。
  • map:遍历并返回新数组,适合需要"转换数据"的场景(如生成HTML字符串、计算新值)。

比如,打印每个朋友的名字用forEach

arduino 复制代码
friends.forEach(friend => {
  console.log(friend.name); // 打印:娄欢、王心志、刘福洲
});

而生成HTML用map,因为需要返回处理后的新数组。


三、总结:新手必学的"效率组合"

  • 字符串模板 :用反引号`````替代+号拼接,支持变量插入(${})和保留换行,特别适合生成HTML或长文本。
  • 数组map:遍历数组并返回新数组,配合字符串模板,能快速完成"数据→HTML"的转换,代码简洁易维护。

这两个特性是ES6中最"接地气"的功能,尤其适合前端新手提升开发效率。下次遇到字符串拼接或数组转换的需求,不妨试试它们,你会爱上这种"丝滑"的编码体验!

(文中示例代码均来自d:\lesson_si\vibe\js\es6文件夹,可本地运行验证~)

相关推荐
刺客-Andy12 分钟前
React 第五十一节 Router中useOutletContext的使用详解及注意事项
前端·javascript·react.js
刺客-Andy16 分钟前
React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例
前端·javascript·react.js
架构个驾驾22 分钟前
Vue2 与 Vuex 状态管理实战指南
前端·javascript·vue.js
FogLetter23 分钟前
从语义化标签到JS变量:前端工程师的必修课
前端·javascript·代码规范
楚留香Ex26 分钟前
通过 require.context 动态加载SVG图标
前端·javascript·react.js
Smile_frank30 分钟前
vue-05(自定义事件)
vue.js
NeverSettle11057431 分钟前
请求接口时传给后端的入参报文太大怎么办,用CompressionStream试试?
前端·javascript
Jooolin33 分钟前
【三大前端语言之一】交互:JavaScript详解
前端·javascript·ai编程
WebCsDn_TDCode34 分钟前
正则表达式检测文件类型是否为视频或图片
javascript·正则表达式·音视频
南方kenny36 分钟前
Web滚动框技术实现全解析:从基础到优化
前端·javascript