当前位置: 首页 > news >正文

优雅而高效的JavaScript——模板字面量

在这里插入图片描述

🤨博主:小猫娃来啦
🤨文章核心:优雅而高效的JavaScript——模板字面量

文章目录

  • 什么是模板字面量
  • 使用模板字面量插入变量
  • 处理多文本
  • 模板字面量的高级应用
    • 标签模板字量
    • 自定义模板字面量函数
  • 常见应用场景
    • 拼接字符串
    • HTML模板
    • SQL查询
    • 文件路径拼接
  • 与统字符串拼接的比较

什么是模板字面量

  • 模板字面量的定义

模板字面量是一种更强大、更灵活的字符串表示方式,使用反引号()包裹。与传统的字符串表示方式相比,模板字量允许在字符串中插入变量、表达式和原始字符串,并且支持多行文本的处理。

  • 模板字面量的特点
  • 使用反引号(`)包裹字符串,使得字符串更清晰易读。
  • 使用${}语法可以在字符串中插入变量和表达式。
  • 支持多行文本的处理,不再需要手动添加换行符。

使用模板字面量插入变量

  • 使用${}语法插入变量

使用${}语法可以在模板字面量中插入变量,例如

const name = 'Alice';
const message = `Hello, ${name}!`;
console.log(message); // Hello, Alice!
  • 嵌套插入变量

模板字面量允许在${}语法中嵌套插入变量,例如:

const = 'John';
const lastName = 'Doe';
const fullName = `${firstName} ${lastName}`;
const message = `Hello, ${fullName}!`;
console.log(message); // Hello, John Doe!
  • 插入表达式

除了插入变量,模板字面量还可以插入任意的JavaScript表达式,例如:

const num1 = 5;
const num2 = 10;
const sum =The sum of ${num1} and ${num2} is ${num1 + num}.`;
console.log(sum); // The sum of 5 and 10 is 15
  • 插入原始字符串

在模板字面量中插入原始字符串时,可以使用${}语法的原始字符串形式,例如:

const rawString = String.raw`HelloWorld`;
console.log(rawString); // Hello\nWorld

处理多文本

  • 使用模板字面量的多行文本

模板字面量可以直接处理多行文本,不再需要手动添加换行符,例如:

const message = `This a 
multi-line 
text.`;
console.log(message);
// This is a
//-line
// text.
  • 多行文本的缩进和格式化

模板字面量支持多行文本的缩进和格式化,可以使用${}语法嵌套实现,例如:

const indentExample = `This is an exampleof ind text.`;
console.log(indentExample);
//   This is an example
//   of indented text.
  • 多行文本转义字符

在模板字面量中使用多行文本时可以使用转义字符来处理特殊字符,例如:

constExample = `This is a\`
multi-line\`
text.`;
console.log(escapeExample);
// This is a
// multi-line
// text.

模板字面量的高级应用

标签模板字量

标签模板字面量是一种使用自定义函数处理板字面量的方式,可以在${}语法前添加一个函数名作为前缀,例如:

function greeting(strings, ...values) {return `${strings[0]}${values[0].toUpperCase()}strings[1]}`;
}
const name = 'alice';
const message = greeting`Hello ${name}!`;
console.log(message); // Hello, ALICE!

自定义模板字面量函数

可以自定义模板字面量函数来处理特定的逻辑,例如:

function multiplier(strings, ...values) {const num = Number(values[]);return strings[0] + (num * 2) + strings[1];
}
const value = 5;
const result = multiplier`The result is: ${value}.`;
console.log(result); // The result is: 10.

常见应用场景

拼接字符串

模板字面量可用于更简洁拼接字符串,特别是含有变量和表达式的情况,例如:

const name = 'Garfield';
const age = 30;
const message = `My name is ${name} and I am ${age} years old.`;
console.log(message); // My name Garfield and I am 30 years old.

HTML模板

const data = { name: 'Alice', age: 30 };
const html = `<div><h1>${data.name}</h1><p>Age: ${data.age}</p></div>
`;
console.log(html);
// <div>
//   <h1>Alice</h1>
//   <p>Age: 30</p>
// </div>

SQL查询

在构建SQL查询时,模板字面量可用于拼接SQL语句和插入变量,例如:

const firstName = '菲猫';
const lastName = '加';
const query = `SELECT *FROM usersWHERE first_name = '${firstName}'AND last_name = '${lastName}'
`;
console.log(query);
// SELECT *
// FROM users
// WHERE first_name = '菲猫'
// AND last_name = '加'

在这或许有很多没有接触过sql语句的程序员
那么我稍微解释一下:

SELECT * FROM users WHERE first_name = ‘菲猫’ AND last_name = ‘加’ 这是个SQL查询语句
SELECT 表示查询*表示所有,FORM表示来自,users 是数据表的名字,WHERE 是条件语句 first_name = 'Alice' AND last_name = 'Smith' 是查询条件
翻译为:在用户表中查询first_name(名)是菲猫,并且 last_name(姓氏)是的用户的所有信息

文件路径拼接

模板字面量还可以方便地拼接文件路径,特别是需要插入变量的情况,例如:

const dir = 'path/to';file = 'index.html';
const filePath = `${dir}/${file}`;
console.log(filePath); // path/to/index.html

与统字符串拼接的比较

  • 效率比较

与传统字符串拼接相比,模板字面量通常在运行时更高效。由于模板字面量的编译阶段已经将变量和表达式嵌入到字符串中,不需要运行时的拼接操作,因此更快速。

  • 可读性比较

模板字面量可以更清晰地展示字符串中的变量和表达式,使得代码更易读和维护。传统字符串拼接可能会导致代码难以阅读和理解,尤其是在包含多个变量和表达式的情况下。

  • 安全性比较

使用模板字面量可以更有效地避免注入攻击。由于模板字面量对变量和表达式的处理是在编译阶段完成的,可以确保在运行时不会执行不安全的代码。

关于模板字符串就介绍到这里啦

在这里插入图片描述


http://www.lryc.cn/news/192140.html

相关文章:

  • Python一步到位实现图像转PDF自动化处理详解
  • 基于IDEA集成环境---Nacos安装
  • 使用 puppeteer 加载 html 文件来运行 js 文件
  • Java 操作 Excel:生成数据、设置单元格样式、设置数据有效性(hutool)
  • YOLOv5算法改进(11)— 主干网络介绍(MobileNetV3、ShuffleNetV2和GhostNet)
  • ideal远程Debug部署在服务器上的服务详解
  • 基于SSM的校园音乐平台系统
  • 07_03文件系统怎么玩的
  • php实战案例记录(24)不要键名只保留值的算法
  • 【交付高质量,用户高增长】-用户增长质量保证方法论 | 京东云技术团队
  • LMI FocalSpec 3D线共焦传感器 使用笔记1
  • 四、RocketMQ发送普通消息、批量消息和延迟消息
  • idea自定义 postfix completion提高编码效率
  • 解锁学习电路设计的正确姿势!
  • 【Linux】 ps命令使用
  • 打造高效的分布式爬虫系统:利用Scrapy框架实现
  • SpringCloud组件Ribbon的IRule的问题排查
  • 比较完整一些chatGPT项目代码(权威)
  • Python - 生成二维码、条形码
  • 8+纯生信,多组机器学习+分型探讨黑色素瘤发文思路。
  • GPU高性能面试-写一个ReduceKernel
  • 深入探索STARK的安全性和可靠性——STARKs全面安全分析
  • WPF 控件分辨率自适应问题
  • CANoe创建仿真工程
  • Scanner 输入回车跳不出循环的解决方法
  • docker 启动 mysql 通过防火墙设置端口无法访问解决方案
  • 智能制造优化,RFID生产线管理系统解决方案
  • 【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密
  • 【特纳斯电子】基于物联网的指纹密码锁系统设计-实物设计
  • 【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列