首页 > 其他分享 >【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量

【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量

时间:2022-11-08 14:00:13浏览次数:51  
标签:ES6 教程 literals 10 JavaScript let 字符串 替换 模板

【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量_数组

英文 | https://www.javascripttutorial.net

翻译 | 杨小爱


在今天的教程中,我们将学习 JavaScript 模板文字,它使我们可以更轻松地使用字符串模板。

在 ES6 之前,我们使用单引号 (') 或双引号 (") 来包装字符串文字。字符串的功能非常有限。

为了使我们能够解决更复杂的问题,ES6 模板文字提供了允许更安全、更干净地处理字符串的语法。

在 ES6 中,通过将文本包装在反引号 (`) 中来创建模板文字,如下所示:

let simple = `This is a template literal`;

我们将获得以下功能:

多行字符串:可以跨越多行的字符串。

字符串格式化:用部分字符串替换变量或表达式的值的能力。 此功能也称为字符串插值。

HTML 转义:转换字符串以使其可以安全地包含在 HTML 中的能力。

JavaScript 模板字面量的基本语法

如前所述,模板文字不使用单引号或双引号,而是使用反引号,如下例所示:

let str = `Template literal in ES6`;


console.log(str);// Template literal in ES6
console.log(str.length); // 23
console.log(typeof str);// string

使用反引号,我们可以在模板文字中自由使用单引号或双引号而无需转义。

let anotherStr = `Here's a template literal`;

如果字符串包含反引号,则必须使用反斜杠 (\) 对其进行转义:

let strWithBacktick = `Template literals use backticks \` insead of quotes`;

多行字符串

在 ES6 之前,我们可以使用以下技术通过在字符串中手动包含换行符 (\n) 来创建多行字符串,如下所示:

let msg = 'Multiline \n\
string';


console.log(msg);
//Multiline
//string

请注意,放在换行符 (\n) 之后的反斜杠 (\) 表示字符串的继续,而不是换行。

然而,这种技术在 JavaScript 引擎中并不一致。 因此,创建一个依赖于数组和字符串连接的多行字符串是很常见的,如下所示:

let msg = ['This text',
'can',
'span multiple lines'].join('\n');

模板文字允许我们更轻松地定义多行字符串,因为我们需要在字符串中的任意位置添加新行:

let p =`This textcanspan multiple lines'

请注意,空格是字符串的一部分。 因此,我们需要确保文本与正确的缩进对齐。 假设我们有一个 post 对象:

let post = {
title: 'JavaScript Template Literals',
excerpt: 'Introduction to JavaScript template literals in ES6',
body: 'Content of the post will be here...',
tags: ['es6', 'template literals', 'javascript']
};

以下代码返回 post 对象的 HTML 代码。 请注意,我们使用对象解构技术将帖子对象的post 属性分配给各个变量:title、excerpt、body和tags。

let {title, excerpt, body, tags} = post;


let postHtml = `<article>
<header>
<h1>${title}</h1>
</header>
<section>
<div>${excerpt}</div>
<div>${body}</div>
</section>
<footer>
<ul>
${tags.map(tag => `<li>${tag}</li>`).join('\n ')}
</ul>
</footer>`;

以下是变量 postHtml 的输出。 请注意,我们如何使用间距正确缩进 <li> 标签。

<article>
<header>
<h1>JavaScript Template Literals</h1>
</header>
<section>
<div>Introduction to JavaScript template literals in ES6</div>
<div>Content of the post will be here...</div>
</section>
<footer>
<ul>
<li>es6</li>
<li>template literals</li>
<li>javascript</li>
</ul>
</footer>

变量和表达式替换

此时,模板文字就像是常规 JavaScript 字符串的更好版本。 模板文字和常规字符串之间的最大区别是替换。

替换,允许我们在字符串中嵌入变量和表达式。 JavaScript 引擎会自动将这些变量和表达式替换为它们的值。 此功能称为字符串插值。

要指示 JavaScript 替换变量和表达式,请将变量和表达式放在一个特殊块中,如下所示:

${variable_name}

请看以下示例:

let firstName = 'John',
lastName = 'Doe';


let greeting = `Hi ${firstName}, ${lastName}`;
console.log(greeting); // Hi John, Doe

替换 ${firstName} 和 ${lastName} 访问变量 firstName 和 lastName 以将它们的值插入到问候字符串中。

然后,greeting 变量保存替换的结果。 以下示例替换为表达式:

let price = 8.99,
tax = 0.1;


let netPrice = `Net Price:$${(price * (1 + tax)).toFixed(2)}`;


console.log(netPrice); // netPrice:$9.89

标记模板

模板标签携带模板文字上的转换并返回结果字符串。

将标签放在模板开头的反引号 (`) 字符之前,如下所示:

let greeting = tag`Hi`;

在此示例中,tag 是适用于 Hi 模板文字的模板标签。 tag可以是具有以下签名的任何函数:

function tag(literals, ...substitutions) {
// return a string
}

在这个函数中:

  • literals 参数是一个包含文字字符串的数组。
  • ubstitutions参数包含为每个替换解释的后续参数。

请看以下示例:

function format(literals, ...substitutions) {
let result = '';


for (let i = 0; i < substitutions.length; i++) {
result += literals[i];
result += substitutions[i];
}
// add the last literal
result += literals[literals.length - 1];
return result;
}


let quantity = 9,
priceEach = 8.99,
result = format`${quantity} items cost $${(quantity * priceEach).toFixed(2)}.`;


console.log(result); // 9 items cost $80.91.

在此示例中,format() 函数接受三个参数:literals数组和存储在替换数组中的另外两个参数substitutions。

第一个参数是包含三个元素的literals数组:

  • 第一次替换 (”) 之前的空字符串。 请注意,文字数组的第一个参数是一个空字符串。
  • 位于第一个和第二个替换之间的字符串“items cost”。
  • 第二次替换后的字符串 ('.')

第二个参数是 9,它是数量变量的解释值。 它成为替换数组的第一个元素。 第三个参数是 80.91,它是表达式 (quantity * priceEach).toFixed(2) 的解释值。 它成为替换数组的第二个元素。

总结

使用反引号为字符串插值创建字符串文字。


学习更多技能请点击下方公众号

【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量_字符串_02

【ES6 教程】第一章 新的ES6语法10—如何替换字符串中的变量_javascript_03

标签:ES6,教程,literals,10,JavaScript,let,字符串,替换,模板
From: https://blog.51cto.com/u_15809510/5832788

相关文章

  • 兼容替代CP2102 USB 转串口芯片 CH9102 USB 转RS485/9线TTL/RS232串口
    今天来讲讲一颗USB总线的转接芯片--CH9102,能够替代ti的CP2101。该芯片实现USB转异步串口。提供了常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备......
  • Oracle、MySQL等数据库故障处理优质文章分享 | 10月汇总
    墨天轮社区于9月起持续举办【聊聊故障处理那些事儿】DBA专题征文活动,每月进行评优发奖,鼓励大家记录工作中遇到的数据库故障处理过程,不仅用于自我复盘与分析,同时也能帮助其......
  • 10 个关于 TypeScript 的小技巧
    英文| https://www.sangle7.com/1、 TypeScript和DOM当你开始使用TypeScript时,你会发现在浏览器环境中使用它,你需要非常了解它。假设我想在页面搜索框里找到一个元素......
  • 9个常用ES6特性归纳
    1、展开操作符顾名思义,用于对象或数组之前的展开操作符(…),将一个结构展开为列表。演示一下:letfirstHalf=[one,two];letsecondHalf=[three,four,...firstHalf......
  • 数据结构 玩转数据结构 6-10 二分搜索树的层序遍历
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13471 1重点关注1.1队列实现层序遍历定义和应用场景定义:由上到下,一层层遍历,又称......
  • SBT20100VDC-ASEMI贴片肖特基二极管SBT20100VDC
    编辑:llSBT20100VDC-ASEMI贴片肖特基二极管SBT20100VDC型号:SBT20100VDC品牌:ASEMI封装:TO-263正向电流:20A反向电压:100V引线数量:3芯片个数:2芯片尺寸:87MIL漏电流:10ua恢复时间:5ns......
  • 24个解决实际问题的ES6代码段
    英文| https://madza.hashnode.dev/24-modern-es6-code-snippets-to-solve-practical-js-problems作者|Madza译者|王强策划|李俊辰这篇文章基于实际使用场景总结......
  • 10个值得你去试试的React开发工具
    JavaScript每天都在出现大量的框架和工具,而React是除了上次我们提到的Vue和Ember之外另一款比较流行的框架。但因为新的工具每天都在不断的出现,开发者在尝试时总会有些不知......
  • process.env前端环境变量配置教程
    1、为什么要配置环境变量在公司,一个项目一般会有开发版本、测试版本、灰度版本和线上版本,每个版本会对应相同或不同的数据库、API地址。为了方便管理,我们通常做成配置文件的......
  • SBT20100VDC-ASEMI贴片肖特基二极管SBT20100VDC
    编辑:llSBT20100VDC-ASEMI贴片肖特基二极管SBT20100VDC型号:SBT20100VDC品牌:ASEMI封装:TO-263正向电流:20A反向电压:100V引线数量:3芯片个数:2芯片尺寸:87MIL漏电流:10ua......