前言

假如有这样一个需求:要求将给定的一个文件路径 D:\bianchengsanmei\blogs\categories\JavaScript 在页面展示出来。

最基本的实现方法可能是下面这个:

  1. <body>
  2. <div id = "container"></div>
  3. </body>
  1. const filePath = "D:\bianchengsanmei\blogs\categories\JavaScript";
  2. document.querySelector("#container").innerText = filePath;

如果真能这么简单就实现的话,那我这篇文章到这里就结束了,这是要写个寂寞吗?

结束是不可能结束的,不信,你看看输出结果:

image-20210824204649951

显然,我们很多时候会忘记有转义符这回事。

因为在 HTML 网页里,像 >、<、 等字符是由特殊含义的,再加上有些字符在 ASCII 字符集中没有定义,因此需要使用转义字符串来表示。

要想正确显示,应该这么写:

  1. const filePath = "D:\\bianchengsanmei\\blogs\\categories\\JavaScript";
  2. document.querySelector("#container").innerText = filePath;

转义符 + “\“ 表示的是字符串 \。

我今天写这篇文章的意思呢,就是推荐给大家另外一种实现方法。

String.raw 简介

String.raw() 是一个模板字符串的标签函数,用来获取一个模板字符串的原始字符串的,比如说,占位符(例如 ${foo})会被处理为它所代表的其他字符串,而转义字符(例如 \n)不会。

语法

  1. String.raw(callSite, ...substitutions)
  2. String.raw`templateString`

参数

  • callSite 一个模板字符串的“调用点对象”。类似{ raw: [‘foo’, ‘bar’, ‘baz’] }。
  • …substitutions 任意个可选的参数,表示任意个内插表达式对应的值。
  • templateString 模板字符串,可包含占位符(${…})。

返回值

给定模板字符串的原始字符串。

使用示例

以下是一些关于 String.raw 的使用示例:

  1. String.raw`Hi\n${2+3}!`;
  2. // 'Hi\\n5!',Hi 后面的字符不是换行符,\ 和 n 是两个不同的字符
  3. String.raw `Hi\u000A!`;
  4. // "Hi\\u000A!",同上,这里得到的会是 \、u、0、0、0、A 6个字符,
  5. // 任何类型的转义形式都会失效,保留原样输出,不信你试试.length
  6. let name = "Bob";
  7. String.raw `Hi\n${name}!`;
  8. // "Hi\\nBob!",内插表达式还可以正常运行
  9. // 正常情况下,你也许不需要将 String.raw() 当作函数调用。
  10. // 但是为了模拟 `t${0}e${1}s${2}t` 你可以这样做:
  11. String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
  12. // 注意这个测试, 传入一个 string, 和一个类似数组的对象
  13. // 下面这个函数和 `foo${2 + 3}bar${'Java' + 'Script'}baz` 是相等的.
  14. String.raw({
  15. raw: ['foo', 'bar', 'baz']
  16. }, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'

实现需求

我们使用 String.raw 来实现以下文章开头的需求:

  1. const filePath = String.raw`D:\bianchengsanmei\blogs\categories\JavaScript`;
  2. document.querySelector("#container").innerText = filePath;

正确显示:

image-20210824211345755

可以看到,使用 String.raw 可以原汁原味的输出期望结果,再也不会因为转义字符的原因导致各种预期之外的结果。

总结

我们可以使用 String.raw 来保证模板字符的输出结果是原始值。

~

~本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

更多相关文章

  1. 字符串控制,流程控制,循环控制
  2. PHP常用字符串函数库
  3. Javascript字符串
  4. 0809 字符串查找和编码字符串
  5. PHP RSA签名(公钥、私钥)
  6. php 常用基础
  7. 完成一个用户注册页面, 用xmind文件中总结的字符串函数库,对表单
  8. 字符串 和数组的方法 以及js 的分支 和循环
  9. 常用字符串数组方法

随机推荐

  1. Android 与 js 简单互调
  2. 【Android】四大组件(3)Service
  3. Android的init过程(二):初始化语言(init.rc)解
  4. Android studio 如何在android选项下生成
  5. Android 学习小结
  6. android 非系统APP访问字符设备
  7. 将support的包名转换成androidx的包名
  8. android 中SoundPool总结
  9. Android 自定义View自定义属性的声明
  10. android 学习笔记(一):1 环境搭建