作者:Andy Chen
译者:前端小智
来源: medium

有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

不晓得大家在利用 React.js 开发网页的时候有没有用过一个很好用的组件叫 styled-components,styled-components 是一个用来产生元素样式的组件,让你可以在 JSX 中编写 css 达到** CSS-IN-JS** 的技巧,讲了这么多就是因为 styled-component 的官方文件有说了这句话:

This unusual backtick syntax is a new JavaScript feature called a tagged template literal.

这个 tagged template literal 让我有点好奇了,因为之前在使用 styled-components 的时候有发现明明要产生元素的 method 都是 function,可是在 styled-compoents 中却看不到任何 “平常” 会使用的 call function 技巧,后来仔细去看了 MDN 才知道原来这个是 ES6 新进的方法,而我直到现在才知道,只能说自己认识的 ES6 真的太少了。

Template Strings

在开始讲 tagged template literal 时,必须要先讲一下 template strings,相信有在使用 ES6 的人都知道 template strings 是非常好用的方法,解决了以往组合字串上需要用冗长的加号不断的拼接。


// ES5
var myName = '前端小智'
console.log("Hello " + myName + '!')
// 'Hello 前端小智!'// ES6
const myName = '前端小智'
console.log(`Hello ${myName}`)
// 'Hello 前端小智!'

甚至 template strings 也可以利用 multi-line 的效果进而达到换行的效果。

// ES5
console.log('Hello\n' + '前端小智')
// Hello
// 前端小智// Es6
console.log(`
Hello
前端小智
`)
// Hello
// 前端小智

看到上面的multi-line 写法有没有瞬间觉得跟在写styled-components 很像呢

其实 template strings 的写法跟接下来要讲的 tagged template literal 可以说是息息相关,这也是为甚麽要前必须要先提到 tagged template literal 的原因。

Tagged Template Literal

tagged template literal 简单来说就是让你可以用另一种方式进行 function call,通常我们认知的 function call 都是利用小括号的方式进行,并且在小括号中传入要让此 function 使用的参数,但 tagged template literal 可以让你利用 template 的技巧进行 function call,写法就跟上面介绍的 template strings 可以说是一模一样。

在上面的例子可以看到输出的格式有点奇怪,竟然是个数组而不是单纯的字符串而已,这是因为 JavaScript 要把 template string 记录起来,这样才能把 template string 中的变量抓出来,毕竟 function call 最重要的就是要把参数传进去。

知道了该特点后,接下来我们尝试用这种方式传参数进去 function 内,就像下面这样。

没想到还是没办法把完整的字串显示出来,其实利用 tagged template literal 的方式进行 function call 时,第一个参数是 template strings 中的 raw strings 也就是除了变量以外的其他字串的集合,会是一个数组,其余的参数则是会根据 template strings 中带入的变量一一的列举出来。

举例来说:假如在 template strings 中一共传入了两个变数,则这两个变量都会被当作此 function 中的第二及第三个参数带入,事例如下。

但这样写真的是很丑,而且你很难预期这个在这个 template strings 中一共会传多少个变量进去,这时候如果要让这个 function 写起来比较好看可以用 ES6 的 rest parameter 的方式,只是会把变量都变成数组,所以要使用变量时要记得解构出来,事例如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6KazRo7-1645660636484)(/img/bVcXZBq)]

总结

这次介绍了一种不同的 function call 方式,希望大家有所收藏。

我是刷碗智,新的一年,我们一起刷刷刷。


代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。

原文:https://medium.com/onedegree-tech-blog/javascript-%E6%9C%89%E8%B6%A3%E7%A%84%E5%86%B7%E7%9F%A5%E8%AD%98-tagged-template-literals-5ca9db71f066

交流

有梦想,有干货,微信搜索 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

JavaScript 有趣的冷知识:tagged template literals相关推荐

  1. C语言的一些有趣的冷知识

    C语言的一些有趣的冷知识 c语言的各种有趣的Tips(不断更新) 1."New B"之后是C语言 2.在函数这一层面extern是冗余的 3.sizeof是一个运算符 4.空格不是 ...

  2. 关于银行,有哪些有趣的冷知识

    作为一名前银行员工,欣奇向大家分享三个银行的冷知识: 一.银行网点没有多少钱 在外人眼里,银行是特别有钱的地方,每天有大把的现金堆在银行的金库里.这没有错,但其中绝大多数的银行网点并没有多少钱.一般的 ...

  3. 计算机冷知识科普,科普冷知识:6个很有意思的冷知识,不求有用,但求有趣!...

    原标题:科普冷知识:6个很有意思的冷知识,不求有用,但求有趣! 冷知识分享,不求有用,但求有趣. 01 憋着的屁不放的时候,屁会被肠壁吸收收进入血液,于是肠道里的气压消失了, 然而屁并没有消失,它只是 ...

  4. 12无法使用otg_12个冷知识:或许只能看看而无法使用,但却真实存在着

    12个或许只能看看而无法使用,但却真实存在着. 脸红 一·所有已知动物中,唯一可以脸红的是人类. 二·有些地区将雨水归类为公共财物,作为公共财物是不允许收集的,违反者将面临处罚. 三·世界上汽车研发成 ...

  5. 树莓派 9 周年:你不知道的树莓派冷知识

    作为最成功的微型计算机,开源的树莓派(Raspberry Pi)在技术圈和学术界一直广受编程爱好者的好评,各路大神基于树莓派制作的新奇设备层出不穷,围绕这款微型计算机已经形成了一种独特的 DIY 文化 ...

  6. 9年没涨价,上太空……这些树莓派的冷知识你知道多少?

    作为最成功的微型计算机,开源的树莓派(Raspberry Pi)在技术圈和学术界一直广受编程爱好者的好评,各路大神基于树莓派制作的新奇设备层出不穷,围绕这款微型计算机已经形成了一种独特的 DIY 文化 ...

  7. 链式比较、奇怪的字母、有趣的import...Python冷知识(六)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第六篇. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Python 那些不为人知的冷知识(二) 谈谈 P ...

  8. 计算机冷知识科普,【科普冷知识】有趣的8个科学冷知识,让你大吃一惊

    原标题:[科普冷知识]有趣的8个科学冷知识,让你大吃一惊 世界上许多的趣味事情存有,有的专业知识大家能在书上学得,但有一些在书本上是学不上的.下边网编和大伙儿共享一些趣味的科学钟头,这种全是书本上沒有 ...

  9. php冷门知识,科普冷知识:6个很有意思的冷知识,不求有用,但求有趣

    冷知识分享,不求有用,但求有趣. 01 憋着的屁不放的时候,屁会被肠壁吸收收进入血液,于是肠道里的气压消失了, 然而屁并没有消失,它只是随着血液进入全身循环,之后到了肝脏,会被肝脏过滤,再到达肺部, ...

最新文章

  1. mysqldump工具,工作的本质是什么呢?(dump表的时候,是否会产生drop表的语句)
  2. hikvision v2.3控件网页demo_昆山UI网页设计师专业培训班 UI设计好就业吗?
  3. Leet Code OJ 100. Same Tree [Difficulty: Easy]
  4. 前端学习(3225):字符串形式
  5. Java笔记-JDBC心跳检测及断开重连线程实例
  6. bootstrap学习笔记(5)
  7. h5球的立体效果_使用HTML5 Canvas 2D直角坐标系实现三维球体效果
  8. [CH5E02] A Little Shop of Flowers
  9. 配置Git for windows(Git bash)登录GitHub
  10. 内存管理 —— ION
  11. 又臭又长的if...else太多了,不知道如何消除?
  12. python免费ocr软件_实用工具 | 6款免费OCR神器,总有一款适合你!
  13. CTF warmup
  14. 需求通信相关技术人才
  15. 【CSU-PIPIOJ】1254 PIPI上学路
  16. matlab m序列扩频,基于matlab的移位寄存器法m序列的产生
  17. 最近在玩跑跑卡丁车!
  18. 数据库DDL、DML分别是什么
  19. 哔哩哔哩如何提取封面_如何提取封面
  20. 微信封号推送卡包发消息方法揭秘

热门文章

  1. java jni dll路径_Java中Jni调用DLL文件试验
  2. iOS刷机后安装源和插件
  3. 十二星座的12种风味咖啡,最后一个能让你上瘾
  4. 解决安装出现用户在命令上发出enlas_agreed=1的问题
  5. HTAP数据库及应用场景简析
  6. python迭代法求极值_用Python实现最速下降法求极值的方法
  7. itext 导出word
  8. OpenCV计算机视觉编程攻略第2版pdf
  9. STM32 CUBEIDE MacOS首次使用笔记
  10. 【WinHex篇】WinHex只读模式(写保护)设置