ES8 中新增的模板语法标签 Tagged Template

在 ES6 中,我们学习到了模板字符串,它允许我们将表达式插入到字符串中,使得字符串更加灵活。而在 ES8 中,我们又新增了一种标签模板的写法,可以用于处理模板字符串,这就是本文介绍的 Tagged Template。

什么是 Tagged Template

一个 Tagged Template 可以被看作是一个函数调用的语法糖,它可以接收一个数组和若干个参数,其中数组中存储了分离了插值部分和纯字符串的模板字符串,而参数则是插入到模板字符串中的表达式的值。比如:

-------- -------------- ---------- -
  -- -------- -------- -- ----
  -- ------- ---------
  ----------------------- ---------- ------------ -- ------ ----- -
-
--- ----- - --------
------------ -----------

可以看到,myTag 函数接收的第一个参数是一个数组 strings,它是模板字符串中没有插值的部分,将模板字符串分为了多段。第二个参数则是一个 rest 参数 values,它存储了模板字符串中的插值表达式的值,按照顺序排列。需要注意的是,rest 参数 values 的个数会比插值表达式的个数多一个,因为字符串的个数比表达式的个数多1。

通过 Tagged Template,我们可以对模板字符串和插入表达式的各部分进行处理,从而满足各种使用场景的需求。

Tagged Template 的应用

字符串格式化

Tagged Template 可以用于更好地格式化字符串。比如,我们可以用一个 toDollar 函数将输入的数字转换为货币格式:

-------- ----------------- ---------- -
  --- --- - ---
  --- ---- - - -- - - --------------- ---- -
    --- -- -----------
    -- -- - -------------- -
      --- -- ---------------------------
    -
  -
  ------ ----
-
--- ----- - ------
------------------------ ----- -- ------------
-- ------ ----- -- -------

上面的 toDollar 函数接收模板字符串的分离数组和插值表达式的值。在处理模板字符串时,toDollar 函数会将插值表达式的值变成适当的货币格式,并将其合并到字符串中。

标记模板的默认值

Tagged Template 还可以指定一个默认的 tag function。在只传入模板字符串时,就会调用这个默认的 tag function。比如下面的代码中,当没有传入标记函数实现 toUpper 时,则使用默认的标记函数进行处理:

-------- ---------------- ---------- -
  --- --- - ---
  --- ---- - - -- - - --------------- ---- -
    --- -- -----------
    -- -- - -------------- -
      --- -- ------------------------
    -
  -
  ------ ----
-
--- -------------- - ----------- -- ----- ---------- -----------
--- ---- - -------
------------------------------------- -- ----

上面的代码中,toUpperDefault 函数使用原生的 String.raw 函数作为默认的标记函数,在字符串中插入的字符串会原样输出,并不会被处理。

模板字符串的本地化处理

Tagged Template 还可以用于将模板字符串的本地化处理。如果我们要将一个字符串翻译成多个语言,只需要写一个 tag function 并在不同的语言中对其进行翻译即可。比如下面的代码中,我们定义了一个 translate 函数,它接收一个 strings 和一个键值对的 arguments 对象,其中 arguments 存储了不同语言的翻译:

-------- ------------------ ---------- -
  ------ -------------------- ---- -- -- -
    --- ----- - --------- -- ---
    ------ --- - --- - ------
  -- ----
-

--- ---- - --------
--- -------- - -
  -------- -
    ------ --------
    ----- --------
    ---- ------
  --
  -------- -
    ------ -----
    ----- -----
    ---- -----
  -
-
--- ----- - ----- ----- -- --------------------------------- ---------
-------------------------- - ----- ------ ----  -- --- - ----- ---- -
------------------------ - ----- ------ ----  -- --- - ----- ---- -

在上面的代码中,我们使用了 translate 函数将模板字符串进行了翻译。在模板字符串中,我们使用了 ${messages[lang][key]} 来获取翻译的结果,而名为 args 的参数则会在翻译结果中被插入。

总结

Tagged Template 是 ES8 中的一个新特性,它可以用于更好地处理模板字符串和插值表达式,从而满足不同的需求。本文介绍了 Tagged Template 的基本使用方式,并通过几个实例展示了它的实际应用。希望读者能通过本文的介绍,更好地理解和掌握 Tagged Template 的使用方法,从而在实际工作和学习中更加得心应手。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/653643d17d4982a6ebe4063d


猜你喜欢

  • Docker 运行容器时报错的解决方案

    在使用 Docker 运行容器时,你可能会遇到各种各样的错误,例如容器无法启动、容器内的应用程序无法访问外部网络或无法正常工作等。这些问题可能由多种因素引起,例如镜像、网络设置或应用程序设置等。

    1 年前
  • Webpack 学习笔记:自己搭建 webpack 多页面打包环境

    在前端开发中,我们经常使用 Webpack 来对代码进行打包、压缩和优化,来提升网站的性能。但是,大部分的 Webpack 学习资料都是针对单页应用的,而在实际开发中,也会遇到需要打包多个页面的情况。

    1 年前
  • 在 Angular 项目中使用 Babel-plugin-syntax-async-functions

    随着 JavaScript 对异步编程的支持越来越完善,使用 async/await 这一语法糖成为了开发者们编写代码的主流方式之一。然而,使用 async/await 却需要一种能够支持这一语法的 ...

    1 年前
  • ES6 中的 Proxy 类用法详解

    在前端开发领域,JavaScript 是一种必不可少的语言。ES6 中引进了一种新的类类型 Proxy,Proxy 可以帮助我们更加方便地处理一些对象操作,同时也极大地增强了 JavaScript 语...

    1 年前
  • Mocha 测试用例中的异步和超时问题

    在前端开发中,测试是一个非常重要的环节。而 Mocha 是一款非常优秀的测试框架,可以帮助我们有效地进行单元测试和集成测试。但是,在编写测试用例时,我们经常会遇到异步和超时问题,本文着重讲解这两个问题...

    1 年前
  • Vue 中的条件渲染

    Vue 是一款流行的前端框架,它提供了多种条件渲染的方式来处理视图层的渲染。这些条件渲染方法可以让我们根据不同的情况来渲染不同的结果,从而达到更好的用户体验。在本文中,我们将深入了解 Vue 中的条件...

    1 年前
  • Hapi.js+MySQL 实现数据访问层封装 - 避免 MySQL 数据安全问题

    在前端开发中,我们经常需要与数据库进行交互,而 MySQL 是一种常用的关系型数据库,但如果不注意安全问题,会导致数据泄露、篡改等严重后果。因此,在使用 MySQL 进行数据交互时,需要对数据访问层进...

    1 年前
  • 如何在快应用中使用 LESS?

    LESS 是一款基于 CSS 语言的扩展,它提供了许多实用功能,例如变量、混合、嵌套等,让 CSS 的编写更加简便和高效。在快应用开发中,我们可以使用 LESS 将 CSS 代码封装成一个个组件,提高...

    1 年前
  • PWA 开发中使用 WebRTC 实现实时通讯的最佳实践

    在现今的互联网时代,实时通讯已经成为了人们生活和工作中不可或缺的部分。而在 PWA(渐进式 Web 应用) 开发中,我们可以使用 WebRTC(Web 实时通讯) 技术来实现实时通讯的功能,从而提升用...

    1 年前
  • ES10: 使用 flat 和 flatMap 来平展嵌套数组

    在 JavaScript 中,数组是一种非常常见的数据类型。有时候,数组中可能会嵌套着其他的数组,这就是嵌套数组。在处理数据时,可能需要将这种嵌套的数组平展开来,以便更方便地进行操作。

    1 年前
  • Angular 应用中如何使用 Web Components

    在前端开发中,Web Components 是一个重要的技术。它是一种自定义元素和 Shadow DOM 的标准,可以将应用程序划分为可重复和可组合的部分。 Angular 是一个流行的前端框架,它也...

    1 年前
  • 小试牛刀:使用 RxJS 实现一个简单的 ToDo 应用

    前言 RxJS 是一个非常流行的反应式编程库。它提供了一种新的方式来处理异步事件和数据流,使得我们可以更容易地解决复杂的问题。在本文中,我们将探索如何使用 RxJS 创建一个简单的 ToDo 应用程序...

    1 年前
  • 如何在 SASS 中使用相对路径

    在前端开发中,SASS 作为一种 CSS 预处理语言,可以大大提高团队协作开发效率,并且支持多种特性,如变量、嵌套、继承等等。在使用 SASS 进行开发时,一个常见的问题就是如何使用相对路径。

    1 年前
  • 用 CSS Grid 实现表格布局的详细教程

    CSS Grid 是一种非常强大的布局方式,它可以轻松地实现复杂的布局效果。本文将介绍如何使用 CSS Grid 实现表格布局,并提供详细的教程和示例代码。 为什么要使用 CSS Grid? 在过去,...

    1 年前
  • Node.js 微服务解决方案和 Serverless 技术实践

    什么是微服务? 在软件开发领域中,微服务已经成为了一个非常流行的概念,尤其是在云计算和软件架构中的应用日益广泛。微服务是一种同时实现松耦合、可维护、可扩展和高可用的服务架构。

    1 年前
  • ECMAScript 2016 中的 Array 扩展:如何进行数组的交集、并集和差集运算

    ECMAScript 2016 是一种脚本语言,可以被用于创建 Web 应用程序,这种语言自从被发布以来已经在全球范围内广泛使用。在 ECMAScript 2016 中,数组是一种常用的数据类型,而数...

    1 年前
  • PM2 部署实战:如何使用 PM2 在腾讯云 CVM 上部署 Node.js 应用程序

    如果你是一位前端工程师,那么你肯定需要部署你的 Node.js 应用程序。而对于 Node.js 应用程序的部署,我们可以使用 PM2 这样的进程管理器来进行部署。

    1 年前
  • ES11 优化 Date 操作:同名的 getTimezoneOffset() 函数作用有何区别?

    在 ES11 中,开发者们对 Date 进行了一些改进,其中之一是优化了 getTimezoneOffset() 函数。然而,在 Date 对象中,有两个同名的 getTimezoneOffset()...

    1 年前
  • Docker 容器间通信的方法

    在使用 Docker 进行开发的过程中,容器与容器之间的通信是必不可少的。而对于一个完整的应用程序来说,它可能需要多个容器协同工作,所以理解容器间的通信方式变得尤为重要。

    1 年前
  • Express.js 如何实现分布式架构

    前端技术的快速发展,使得我们需要处理的数据量不断增大,单个服务器协同处理数据已经逐渐无法满足需求,分布式架构已成为必然趋势。今天我们来讨论一下如何使用 Express.js 实现分布式架构,并为大家提...

    1 年前

相关推荐

    暂无文章