首页 前端开发 Web前端入门第 78 问:JavaScript 比较少见的模版字符串用法

Web前端入门第 78 问:JavaScript 比较少见的模版字符串用法

在 ES6 之前,JS 的多行字符串一直是开发难题,在处理多行字符串时,各种各样的方案都有~~

在 JS 中,如果直接这样写多行字符串:

const str1 = '第一行
第二行';
那浏览器转过来就打脸,分分钟报错:

Uncaught SyntaxError: Invalid or unexpected token
ES5 多行字符串
以下多种方式都输出:

公众号:
前端路引
1、使用加号拼接:

在每行字符串后面添加 + ,拼接跨行的字符串。

const str2 = '公众号:' +
'前端路引';
console.log(str2);
2、反斜线转义换行

在每行末尾添加 \,可以做到跨行书写字符串。

const str3 = '公众号:\n\
前端路引';
console.log(str3);
3、利用数组保存多行字符串

利用数组的 join 方法,可以实现多个数组元素拼接成字符串。

const str4 = [
'公众号:',
'前端路引'
].join('\n');
console.log(str4);
4、使用注释保存多行字符串

此方法有点邪门,很早之前就看到过,也不知道出至哪位大佬~~
注意:注释内容在代码压缩时候可能会被删除。

function multiline(fn) {
return fn.toString()
.replace(/^[^\/]+\/\*!?/, '') // 删除函数定义和注释起始符
.replace(/\*\/[^\/]+$/, ''); // 删除注释结束符
}
const str5 = multiline(function() {
/*公众号:
前端路引
*/
});
console.log(str5);
5、使用 HTML 标签保存多行字符串

使用 type="text/plain" 的 script 标签多行文本内容,再 JS 中获取 textContent 即可得到跨行字符串。
此方法是很多浏览器端的模板引擎做法,包括 Vue 不使用 Vite 打包时都可以这么玩~~

<script id="multiText" type="text/plain">公众号:
前端路引</script>

<script>
const str6 = document.querySelector('#multiText').textContent;
console.log(str6);
</script>
ES5 多行字符串在使用方法上,总感觉有一点歪门邪道,直到 ES6 模版字符出现,终于实现了大统一~~

ES6 模版字符
使用反引号两个 (``)包起来的字符串就是模板字符串,模板字符串的各种用法如下:

1、多行字符串

const str7 = `公众号:
前端路引`;
console.log(str7);
2、字符串插值

模板字符串重点不是用来显示多行字符串,而是在字符串中间可以插入变量,再也不需要使用 + 拼接了。

const name = '前端路引';
const str8 = `公众号:
${name}`;
console.log(str8);

// ES5 必须使用 + 拼接
const str9 = '公众号:\n' + name;
console.log(str9);
模板字符串插值 ${} 中,既然可以使用变量,肯定是也能使用 JS 中的各种表达式,包括函数调用等。比如

const temp1 = `随机数:${Math.random()}`
const temp2 = `是否大于0.5:${Math.random() > 0.5 ? '是' : '否'}`
模板字符串的骚操作开始,以下用法在开发中不是很常见~~

3、模板标签

此写法第一次见到的时候,一度以为存在语法错误~~

function tag(strings, ...values) {
let result = "";
strings.forEach((str, i) => {
result += str;
if (i < values.length) result += `<tag>${values[i]}</tag>`;
});
return result;
}
const name2 = '前端路引';
const age2 = 1
console.log(tag`公众号:${name2},年龄:${age2}`);
// 输出 公众号:<tag>前端路引</tag>,年龄:<tag>1</tag>
重点代码:

tag`公众号:${name2},年龄:${age2}`
说实话,当时是第一次见到 JS 的 function 调用时候不需要使用括号~~

4、原始字符串

JS 中的字符串,如果存在反引号 \ ,那么就会被当做转义字符处理,可通过 String.raw 让字符串不要转义。

输出 C:\user\Web3Dev\Documents 这个字符串:

// 不使用 raw 方法就必须使用 `\\` 两个反引号
console.log('C:\\user\\web3dev\\Documents');

// 使用 raw 方法
console.log(String.raw`C:\user\web3dev\Documents`);
写在最后
IE 时代,JS 的字符串拼接性一度当做性能优化课题存在,开发建议永远不要使用 + 去拼接字符,一直都是建议使用数组 join 方法拼接字符串,直到 Chrome 崛起,V8 引擎这个性能怪兽终于让 JS 的字符串性能飙升,开发者也不用再考虑字符串拼接的性能问题了~~

站星网

在 ES6 之前,JS 的多行字符串一直是开发难题,在处理多行字符串时,各种各样的方案都有~~在 JS 中,如果直..

为您推荐

Web前端入门第 79 问:JavaScript async & await 的异步任务进化之路

JS 中异步任务随处可见,比如:1、用户交互的点击、输入2、网络请求的 fetch、ajax、WebSocket3、资源中的图片、脚本加载4、定时任务 setTimeout、setInterval、动画5、Web Worker 中的后台任务以上这些地方都能见到..

Web前端入门第 76 问:JavaScript 鼠标事件(mouse) enter/leave 和 over/out 区别

题外话在考察事件基础的时候,会经常被问及 click、mousedown、mouseup 它们三者执行的先后顺序是怎样的?如果平时没太注意,这细节可能就会忽略,毕竟很少会在同一个元素上面同时绑定这三个事件~~直接上示例:<div ..

Web前端入门第 67 问:JavaScript 中的面向对象编程

此 对象 非彼对象啊,不要理解错了哦~~面向对象编程 这个概念在 Java 编程语言中用得比较多,JS 同时支持 面向对象编程 和 函数式编程。像大名鼎鼎的 React 和 Vue 他们都有两种开发风格,比如:Vue 中的 组合式API ..

Web前端入门第 57 问:JavaScript 数据类型与类型转换

在程序语言中,数据类型是基础,一切程序都是建立在基础数据之上。如果说程序如同万丈高楼平地起,那么数据类型就像沙、石、钢筋、水泥等等最基础的原料。一样的高楼,不同的人,用相同的原料,造的方法也会有千般变..

JavaScript实现图片上传预览及获取图片尺寸和大小的完整指南

在现代Web开发中,提供图片上传的预览功能以及获取图片的尺寸和大小信息,已成为提升用户体验的重要手段。本文将详细介绍如何使用JavaScript实现这些功能,帮助你在用户上传图片前进行有效的验证和优化。一、实现图..

Web前端入门第 60 问:JavaScript 各种数组定义与数组取值方法

数组可以算是程序里面最常用的数据结构了,但凡网页上任何一个列表数据,基本都是以数组的形式存在,像表格、banner图、菜单列表、商品列表,分类列表等等,在前端领域都是以数组处理。数组的定义JS 的数组花样很多..

Web前端入门第 55 问:JavaScript 严格模式与非严格模式区别

JavaScript 默认是非严格模式的,可以通过 "use strict"; 启用严格模式。此声明语句可以放在 JS 文件顶部,也可以放在函数内部。启用严格模式1、外部脚本在 JS 文件开头声明,内部脚本在 <script> 标签开头声明,声..

Web前端入门第 53 问:JavaScript 的各种调试方法

任何一门编程语言,在学习之前都应该先弄清楚它的调试方法,毕竟没有不挖坑的人类!程序一旦出现问题,第一时间就是找到问题出在哪儿,其次才是拿出解决办法。如果都找不到问题原因,那又何从谈起解决办法呢?如何排..

Web前端入门第 54 问:JavaScript 3 种书写位置及 script 标签的正确存放位置

JS 的代码并没有强制规定放在 HTML 中的某个位置,如果您有使用过开发者工具查看过网页源码,那么您会看到很多 JS 代码都以 .js 文件的形式存放,并且放在了 HTML 文件最后,也就是 </body> 结束标签之前。但如果仔..

Web前端入门第 52 问:JavaScript 的应用领域

截至目前,您应该对前端的 HTML + CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了。当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享。那么咱们接下来看看 Java..

.NET C# 过滤从富文本编辑器html里的Javascript脚本

富文本编辑器在允许用户输入丰富内容的同时,也带来了跨站脚本攻击(XSS)的风险。过滤提交的 HTML 中的 <script> 脚本是防止跨站脚本攻击(XSS)的关键步骤。在 .NET C# 服务端过滤 <script> 脚本主要有以下几种方..

ThinkPHP5.0如何全局替换前端某个字符串

在 Nginx 配置文件中添加以下内容:sub_filter'旧字符串''新字符串';sub_filter_onceoff;在.htaccess文件中添加以下内容:<IfModulemod_substitute.c>AddOutputFilterByTypeSUBSTITUTEtext/htmlSubs..

轻松学习 JavaScript函数中的默认参数

JavaScript函数可以有默认参数值。通过默认函数参数,你可以初始化带有默认值的正式参数。如果不初始化具有某些值的参数,则该参数的默认值为undefined。请看下列代码:function foo(num1){console.log(num1);}foo()..

js 截取字符串

本文为大家介绍三种 js 截取字符串的方法:substring() 方法;substr() 方法;slice() 方法;方法1:substring() 方法string.substring(from, to)方法从 from 位置截取到 to 位置,to 可选,没有设置时默认到末尾。..

JavaScript API 设计原则详解

前言本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详..

JavaScript 中精度问题以及解决方案

JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在ES5 规范中指出了指数位E的取值范围是[-1074, 971]。精度问题汇总想用有限..

JavaScript 六种继承方式

继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,不支持接口继承,实现继承主要依靠原型链来实现的。原型链首先得要明白什么是原型链,在一篇文章看懂proto和prototype的关系及区别中讲得非常详细..

JavaScript 事件委托详解

基本概念事件委托,通俗地来讲,就是把一个元素响应事件(click、focus……)的函数委托到另一个元素;一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应..

JavaScript 中的遍历详解

编程这么多年,要是每次写遍历代码时都用 for 循环,真心感觉对不起 JavaScript 语言~对象遍历为了便于对象遍历的测试,我在下面定义了一个测试对象obj。测试对象// 为 Object 设置三个自定义属性(可枚举)Object.p..

值得探索的 8 个机器学习 JavaScript 框架

JavaScript开发人员倾向于寻找可用于机器学习模型训练的JavaScript框架。下面是一些机器学习算法,基于这些算法可以使用本文中列出的不同JavaScript框架来模型训练:简单的线性回归多变量线性回归逻辑回归朴素贝叶斯..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制