javascript ES6 Template String模板字符串使用方法

 更新时间:2023年06月19日 12:44:25   作者:Amy_home  
这篇文章主要介绍了javascript ES6 模板字符串(Template String)是增强版的字符串,用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量,需要的朋友可以参考下

模板字符串(Template String)是增强版的字符串,用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

用法

用法

// 普通字符串
`In JavaScript '\n' is a line-feed.`
// 多行字符串
`In JavaScript this is
not legal.`
// 字符串中嵌入变量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`   // Hello Bob, how are you today?

上面代码中,模板字符串都是用反引号表示,如果在模板字符串中需要使用反引号,则前面需要用反斜杠转义。

var greeting = `\`Yo\` World!`; // `Yo` World!

如果使用模板字符串表示多行字符串,则所有的空格、缩进和换行都会被保留在输出中。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`);

上面代码中,所有模板字符串的空格和换行都是被保留的,比如<ul>标签前面会有一个换行。如果想把行首和行尾的换行、空格等去掉,则使用trim方法即可。

$('#list').html(`
<ul>
  <li>first</li>
  <li>second</li>
</ul>
`.trim());

模板字符串中嵌入变量,要将变量名写在${}之中。大括号内可以放入任意的JavaScript表达式,可以进行运算,以及引入对象属性。

var x = 1, y = 2;
`${x} + ${y} = ${x + y}`;
// "1 + 2 = 3"
`${x} + ${y * 2} = ${x + y * 2}`;
// "1 + 4 = 5"
var obj = {x: 1, y: 2};
`${obj.x + obj.y}`
// "3"

模板字符串之中还可以调用函数。

function func() {
    return 'Hello';
}
`${func()} World`;
// "Hello World"

如果大括号中的值不是字符串,则将按照一般的规则转换为字符串。如,若大括号中是一个对象,则将默认调用对象的toString方法,把对象转换为字符串。

如果模板字符串中的变量没有声明,则会报错。

// 变量place没有声明
var msg = `Hello, ${place}`;
// ReferenceError: place is not defined

模板字符串之间还可以进行嵌套。

var tmpl = addrs => `
    <table>
    ${addrs.map(addr => `
        <tr><td>${addr.first}</td></tr>
        <tr><td>${addr.last}</td></tr>
    `).join('')}
    </table>
`;
tmpl([{first:'a', last: 'b'}]);
// output:
/*"
    <table>
        <tr><td>a</td></tr>
        <tr><td>b</td></tr>
    </table>
"*/

如果需要引用模板字符串本身,在需要时执行,可以像下面这样写。

// 写法一
var str = 'return ' + '`Hello ${name}!`';
var func = new Function('name', str);
func('Amy');    // "Hello Amy!"
// 写法二
var str = '(name) => `Hello ${name}!`';
var func = eval.call(null, str);
func('Amy');    // "Hello Amy!"

标签模板

模板字符串的功能,不仅是上面那些,它还可以紧跟在一个函数后面,该函数将被调用来处理这个模板字符串,这种称为“标签模板”功能(Tagged template)。

标签模板函数第一个参数是字符串模板的常量数组,后面的每一个参数为表达式的计算结果,函数名称可以任意指定。下面是一个例子:

var a = 5, b = 10;
function tag(strings, ...values) {
    console.log(strings[0]);    // "Hello "
    console.log(strings[1]);    // " world"
    console.log(strings[2]);    // ""
    console.log(values[0]);     // 15
    console.log(values[1]);     // 50
    return "Anything";
}
tag`Hello ${a + b} world ${a * b}`;
// Anything
alert`123`
// 等同于
alert(123)

标签模板其它是一种特殊的函数调用形式,“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。

var a = 1,
    b = 2;
tag`Helo ${a + b} world ${a * b}`;

上面代码中,模板字符串前面有一个标识名tag,它是一个函数。整个表达式的返回值就是tag函数处理模板字符串后的返回值。

函数tag依次会接收到多个参数。

function tag(stringArr, value1, value2) {
    // ...
}
// 等同于
function tag(stringArr, ...values) {
    // ...
}

tag函数的第一个参数是一个数组,该数组的成员是模板字符串中那些没有变量替换的部分,也就是说,变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间,以此类推。

tag函数的其他参数,都是模板字符串各个变量被替换的值。本例中,模板字符串含有两个变量,因此tag会接收到value1和value2两个参数。

tag函数所有参数的实际值如下:

  • 第一个参数: [‘Hello ‘, ’ world’, ”]
  • 第二个参数: 3
  • 第三个参数: 2

也就是说,tag函数实际上是用下面的形式调用:

tag(['Hello ',' world', ''], 3, 2);

String对象的raw方法

String.raw方法用来充当模板字符串的处理函数,返回一个除表达式和变量会被替换,其它都保持原样的字符串。

String.raw的详细用法可以参考这篇文章 https://www.jb51.net/article/250856.htm

String.raw`Hi\n${2+3}!`;
// "Hi\n5!"
String.raw`Hi\u000A!`;
// "Hi\u000A!"
String.rwa`Hi\\n`;
// "Hi\\n"

String.raw方法可以作为处理模板字符串的基本方法,它会将所有变量替换,而且对斜杠进行转义,方便下一步作为字符串来使用。

到此这篇关于javascript ES6 Template String模板字符串使用方法的文章就介绍到这了,更多相关js Template String内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript中闭包概念与用法深入理解

    javascript中闭包概念与用法深入理解

    这篇文章主要介绍了javascript中闭包概念与用法,结合实例形式深入分析了javascript中闭包的概念、使用方法与相关注意事项,需要的朋友可以参考下
    2016-12-12
  • 使用js/jquery获取指定class名称的3种方式总结

    使用js/jquery获取指定class名称的3种方式总结

    获取class的值其实非常简单,这篇文章主要给大家介绍了关于总结使用js/jquery获取指定class名称的3种方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 很多人都是用下面的js刷新站IP和PV

    很多人都是用下面的js刷新站IP和PV

    有人用JS做网站跳转,也有人用很多其他作弊的方法,今天又发现有太多的人用这样的方法实现两个站的IP共享,把http://www.jb51.net替换成自己的站
    2008-09-09
  • 利用JavaScript中的高阶函数和闭包实现命令模式

    利用JavaScript中的高阶函数和闭包实现命令模式

    命令模式提供了一种优雅的解决方案,使得我们能够灵活地封装和管理代码操作,所以本文将为大家介绍命令模式的概念、应用场景以及在JavaScript中的实现方式,需要的可以参考一下
    2023-06-06
  • Bootstrap Table使用方法详解

    Bootstrap Table使用方法详解

    这篇文章主要为大家详细介绍了JS组件Bootstrap Table使用方法,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • js实现无缝循环滚动

    js实现无缝循环滚动

    这篇文章主要为大家详细介绍了js实现无缝循环滚动的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • JS request函数 用来获取url参数

    JS request函数 用来获取url参数

    项目中经常会遇到这种问题 下面代码解决问题!
    2010-05-05
  • JavaScript高阶函数_动力节点Java学院整理

    JavaScript高阶函数_动力节点Java学院整理

    这篇文章主要介绍了JavaScript高阶函数,详细讲解了什么是高阶函数和高阶函数的用法,有兴趣的可以了解下
    2017-06-06
  • 微信小程序学习笔记之登录API与获取用户信息操作图文详解

    微信小程序学习笔记之登录API与获取用户信息操作图文详解

    这篇文章主要介绍了微信小程序学习笔记之登录API与获取用户信息操作,结合实例形式分析了微信小程序登陆请求及后台交互相关操作技巧,并结合图文形式进行说明,需要的朋友可以参考下
    2019-03-03
  • 通过flv.js播放监控示例深入探究直播流技术

    通过flv.js播放监控示例深入探究直播流技术

    本文记录一下在使用 flv.js 播放监控视频时踩过的各种各样的坑,虽然官网给的 Getting Started 只有短短几行代码,跑一个能播视频的 demo 很容易,但是播放时各种各样的异常会搞到你怀疑人生,下面我将自己踩过的坑,以及踩坑过程中补充的相关知识,详细总结一下
    2023-10-10

最新评论