前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天3分钟,重学ES6-ES12(三)标签模版字符串

每天3分钟,重学ES6-ES12(三)标签模版字符串

作者头像
虎妞先生
发布2022-10-27 19:57:27
4670
发布2022-10-27 19:57:27
举报

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

每天3分钟,重学ES6-ES12文章汇总

前言

今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,今天介绍的是模版字符串和标签模版字符串

模版字符串

  • 在ES6之前,如果我们想要将字符串和一些动态的变量(标识符)拼接到一起,是非常麻烦和丑陋的(ugly)。
  • ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接:
    • 首先,我们会使用 `` 符号来编写字符串,称之为模板字符串;
    • 其次,在模板字符串中,我们可以通过 ${expression} 来嵌入动态的内容;

代码演示

代码语言:javascript
复制
// ES6之前拼接字符串和其他标识符
const name = "yz"
const age = 24
const height = 175

console.log("my name is " + name + ", age is " + age + ", height is " + height)
// my name is yz, age is 24, height is 175

// ES6提供模板字符串 ``
const message = `my name is ${name}, age is ${age}, height is ${height}`
console.log(message)
//  my name is yz, age is 24, height is 175

const info = `age double is ${age * 2}`
console.log(info)
// age double is 48

function doubleAge() {
  return age * 2
}

const info2 = `double age is ${doubleAge()}`
console.log(info2)
// double age is 48

标签模版字符串

函数调用的一种特殊形式

  • 模板字符串还有另外一种用法:标签模板字符串(Tagged Template Literals)。
    • 我们一起来看一个普通的JavaScript的函数:
代码语言:javascript
复制
function foo(m, n, x) {
 console.log(m, n, x, '---------')
}

foo("Hello", "World")
  • 如果我们使用标签模板字符串,并且在调用的时候插入其他的变量:
    • 模板字符串被拆分了;
    • 第一个元素是数组,是被模块字符串拆分的字符串组合;
    • 后面的元素是一个个模块字符串传入的内容;
代码语言:javascript
复制
// 另外调用函数的方式: 标签模块字符串
// foo``

// foo`Hello World`
const name = "why"
const age = 18
// ['Hello', 'Wo', 'rld']
foo`Hello${name}Wo${age}rld`

语法

标签模板由标签函数和模板字符串两部分组成。 其中标签函数的名称大家可以根据项目规范随意命名,模板字符串往往是是需要处理的数据内容。

代码语言:javascript
复制
// 语法标准
tag(arrStrings, exp1, exp2, exp3, ...)
// 实际使用
foo`Hello${name}Wo${age}rld`

对照着来看

  • tag就是函数名
    • 如foo = tag
  • arrStrings 指的是被 ${...} 这种表达式分隔的字符串
    • 如arrStrings = ['Hello','Wo','rld'] = foo函数中的第一个参数m
  • exp1, exp2, ... 分别表示第1个 {...} 占位符中表达式的值,第2个 {...} 表达式的值 exp1 =

应用场景

标签模板功能很强大,可能一开始并不会觉得厉害之处,平时工作中也不会用到,但是这些知识是有用的,在很多库中会用到它。

react的styled-components

可以直接生成组件,动态生成样式

代码语言:javascript
复制
const Button = styled.button`
  background: ${props => props.primary ? 'palevioletred' : 'white'};
  color: ${props => props.primary ? 'white' : 'palevioletred'};
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

多语言转化(国际化处理)

代码语言:javascript
复制
i18n`Welcome to ${siteName}, you are visitor number ${visitorNumber}!`
// "欢迎访问xxx,您是第xxxx位访问者!"

最后,这是我第一次参加更文活动,茫茫人海中,如果有幸遇到你,读到我这篇文章,那真是太好了。我深知还有很多不足,希望大家能多提建议,还是想舔着脸皮,向屏幕前的大帅比们,大漂亮们,恳请一个小小的点赞,这会是对我莫大鼓励。也祝愿点赞的大帅比们,大漂亮们升职加薪走向人生巅峰!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 模版字符串
    • 代码演示
    • 标签模版字符串
      • 语法
        • 应用场景
          • react的styled-components
          • 多语言转化(国际化处理)
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档