导读:本期聚焦于小伙伴创作的《JavaScript模板字面量中动态表达式的正确使用姿势是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JavaScript模板字面量中动态表达式的正确使用姿势是什么》有用,将其分享出去将是对创作者最好的鼓励。

模板字面量是ES6新增的字符串表示方式,使用反引号包裹字符串内容,最大的特点就是支持在字符串中嵌入动态表达式,不需要再通过加号拼接字符串和变量,让代码更简洁易读。在实际开发中,掌握动态表达式的正确使用方法,能避免很多不必要的语法错误。

JavaScript模板字面量中动态表达式的正确使用姿势是什么

模板字面量动态表达式基本语法

模板字面量中的动态表达式需要放在${}占位符中,表达式执行后的结果会被转换成字符串,插入到占位符所在的位置。基本的使用形式如下:

// 嵌入变量
const name = '张三';
const age = 25;
const info = `姓名:${name},年龄:${age}`;
console.log(info); // 输出:姓名:张三,年龄:25

// 嵌入简单运算
const a = 10;
const b = 20;
const result = `两数之和为:${a + b}`;
console.log(result); // 输出:两数之和为:30

可嵌入的动态表达式类型

1. 变量与常量

可以直接在${}中嵌入已经声明的变量或者常量,包括基本数据类型和引用数据类型,引用数据类型会默认调用其toString方法转换为字符串。

const user = {
  name: '李四',
  // 自定义toString方法
  toString() {
    return this.name;
  }
};
const str = `当前用户:${user}`;
console.log(str); // 输出:当前用户:李四

2. 函数调用

可以在占位符中直接调用函数,函数的返回值会作为动态内容插入字符串。需要注意函数调用不要写成标签形式,比如input()是函数调用,不是<input/>标签。

function getGreeting(time) {
  if (time < 12) {
    return '早上好';
  } else if (time < 18) {
    return '下午好';
  } else {
    return '晚上好';
  }
}
const hour = new Date().getHours();
const greeting = `${getGreeting(hour)},欢迎访问系统`;
console.log(greeting);

3. 三元运算符与逻辑表达式

可以在占位符中使用三元运算符或者逻辑表达式,实现简单的条件判断逻辑,不需要额外定义函数。

const score = 85;
const level = `成绩等级:${score >= 90 ? '优秀' : score >= 60 ? '及格' : '不及格'}`;
console.log(level); // 输出:成绩等级:及格

const isLogin = true;
const tip = `登录状态:${isLogin && '已登录' || '未登录'}`;
console.log(tip); // 输出:登录状态:已登录

4. 对象属性访问与数组操作

支持在占位符中访问对象属性、数组元素,也可以进行数组的常用操作,比如拼接、截取等。

const arr = ['苹果', '香蕉', '橙子'];
const fruitStr = `水果列表:${arr.join('、')}`;
console.log(fruitStr); // 输出:水果列表:苹果、香蕉、橙子

const obj = { id: 1, title: 'JavaScript教程' };
const desc = `课程信息:ID为${obj.id},名称是${obj.title}`;
console.log(desc); // 输出:课程信息:ID为1,名称是JavaScript教程

常见使用误区

  • 忘记使用反引号包裹字符串,仍然使用单引号或者双引号,此时${}会被当作普通字符处理,无法解析动态表达式。
  • ${}中写多行表达式或者复杂的语句块,模板字面量的占位符只支持单个表达式,不支持语句块,多行逻辑需要先封装成函数再调用。
  • 直接在占位符中写HTML标签不转义,比如`<div>${content}</div>`如果content包含HTML特殊字符,需要手动转义避免XSS问题。
  • 误以为占位符中可以声明变量,比如${const a = 1; a}这种写法会直接抛出语法错误。

最佳实践建议

复杂逻辑不要直接写在模板字面量的占位符中,尽量先处理逻辑得到结果,再将结果放入占位符,提升代码可读性和可维护性。

如果动态表达式逻辑较复杂,建议先定义函数或者变量,再嵌入到模板字面量中:

// 不好的写法
const order = {
  price: 100,
  count: 3,
  discount: 0.8
};
const orderDesc = `订单总价:${order.price * order.count * order.discount > 200 ? (order.price * order.count * order.discount * 0.9).toFixed(2) : (order.price * order.count * order.discount).toFixed(2)}`;

// 好的写法
const totalPrice = order.price * order.count * order.discount;
const finalPrice = totalPrice > 200 ? (totalPrice * 0.9).toFixed(2) : totalPrice.toFixed(2);
const orderDescGood = `订单总价:${finalPrice}`;
console.log(orderDescGood);

另外,如果需要在模板字面量中嵌入HTML内容,并且内容来自用户输入,一定要对特殊字符进行转义,避免XSS攻击:

function escapeHtml(str) {
  return str.replace(/[<>&]/g, (match) => {
    const map = {
      '<': '<',
      '>': '>',
      '&': '&'
    };
    return map[match];
  });
}
const userInput = '<script>alert("xss")</script>';
const safeStr = `用户输入内容:${escapeHtml(userInput)}`;
console.log(safeStr); // 输出:用户输入内容:<script>alert("xss")</script>

JavaScript模板字面量动态表达式ES6修改时间:2026-07-16 07:09:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。