javascript模板字符串(反引号)

模板字面量 是允许嵌入表达式的字符串字面量。

你可以使用多行字符串字符串插值功能。它们在ES2015规范的先前版本中被称为“模板字符串”。

语法

`string text`?`string text line 1 string text line 2`?`string text ${expression} string text`?tag `string text ${expression} string text`

描述

模板字符串使用反引号 () 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(${expression})的占位符。占位符中的表达式和周围的文本会一起传递给一个默认函数,该函数负责将所有的部分连接起来,如果一个模板字符串由表达式开头,则该字符串被称为带标签的模板字符串,该表达式通常是一个函数,它会在模板字符串处理后被调用,在输出最终结果前,你都可以通过该函数来对模板字符串进行操作处理。在模版字符串内使用反引号(`)时,需要在它前面加转义符(\)。

`\`` === "`" // --> true

多行字符串

在新行中插入的任何字符都是模板字符串中的一部分,使用普通字符串,你可以通过以下的方式获得多行字符串:

console.log(‘string text line 1\n‘ +‘string text line 2‘);// "string text line 1// string text line 2"

要获得同样效果的多行字符串,只需使用如下代码:

console.log(`string text line 1string text line 2`);// "string text line 1// string text line 2"

插入表达式

在普通字符串中嵌入表达式,必须使用如下语法:

var a = 5;var b = 10;console.log(‘Fifteen is ‘ + (a + b) + ‘ and\nnot ‘ + (2 * a + b) + ‘.‘);// "Fifteen is 15 and// not 20."

现在通过模板字符串,我们可以使用一种更优雅的方式来表示:

var a = 5;var b = 10;console.log(`Fifteen is ${a + b} andnot ${2 * a + b}.`);// "Fifteen is 15 and// not 20."

嵌套模板

在某些时候,嵌套模板是具有可配置字符串的最简单也是更可读的方法。 在模板中,只需在模板内的占位符 ${ } 内使用它们,就可以轻松地使用内部反引号。 例如,如果条件 a 是真的,那么返回这个模板化的文字。

一个普通字符串例子:

var classes = ‘header‘classes += (false ?   ‘‘ : true ?     ‘ icon-expander‘ : ‘ icon-collapser‘);

输出:header icon-expander

在ES2015中使用模板文字而没有嵌套:

var classes = `header ${ false ? ‘‘ :(true ? ‘icon-expander‘ : ‘icon-collapser‘) }`;

输出:header icon-expander

在ES2015的嵌套模板字面量中:

var classes = `header ${ false ? ‘‘ :`icon-${true ? ‘icon-expander‘ : ‘icon-collapser‘}` }`;

输出:header icon-icon-expander

带标签的模板字符串

更高级的形式的模板字符串是带标签的模板字符串。标签使您可以用函数解析模板字符串。标签函数的第一个参数包含一个字符串值的数组。其余的参数与表达式相关。最后,你的函数可以返回处理好的的字符串(或者它可以返回完全不同的东西 , 如下个例子所述)。用于该标签的函数的名称可以被命名为任何名字。

var person = ‘Mike‘;var age = 28;?function myTag(strings, personExp, ageExp) {?  var str0 = strings[0]; // "that "  var str1 = strings[1]; // " is a "?  // There is technically a string after  // the final expression (in our example),  // but it is empty (""), so disregard.  // var str2 = strings[2];?  var ageStr;  if (ageExp > 99){    ageStr = ‘centenarian‘;  } else {    ageStr = ‘youngster‘;  }?  return str0 + personExp + str1 + ageStr;?}?var output = myTag`that ${ person } is a ${ age }`;?console.log(output);// that Mike is a youngster

标签函数并不一定需要返回一个字符串。可以返回其他数据类型,比如数组、json等

原始字符串

在标签函数的第一个参数中,存在一个特殊的属性raw ,我们可以通过它来访问模板字符串的原始字符串,而不经过特殊字符的替换。

function tag(strings) {  console.log(strings.raw[0]);}?tag`string text line 1 \n string text line 2`;// logs "string text line 1 \n string text line 2" 

另外,使用String.raw() 方法创建原始字符串和使用默认模板函数和字符串连接创建是一样的。

var str = String.raw`Hi\n${2+3}!`;// "Hi\n5!"?str.length;// 6?str.split(‘‘).join(‘,‘);// "H,i,\,n,5,!"

研究了一下,其实模板字符串中的占位符${expression}相当于分隔符,将模板字符串分割,

function tag(strings) {console.log(strings.raw[0]);?console.log(strings.raw[1]);?console.log(strings.raw[2]);}?tag`${document.cookie}`;//0,1都是空,3是undefinedtag`aaa${document.cookie}`;//0是aaa,1是空,3是undefinedtag`aaa${document.cookie}bbb`;//0是aaa,1是bbb,3是undefinedtag`aaa${document.cookie}bbb${document}ccc`;//0是aaa,1是bbb,3是ccc

从上面例子可以看出占位符${expression}相当于分隔符,将模板字符串分割。

带标签的模板字面量及转义序列

自ES2016起,带标签的模版字面量遵守以下转义序列的规则:

  • Unicode字符以"\u"开头,例如\u00A9
  • Unicode码位用"\u{}"表示,例如\u{2F804}
  • 十六进制以"\x"开头,例如\xA9
  • 八进制以""和数字开头,例如\251

注:八进制好像不管用

参考资料

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings

原文地址:https://www.cnblogs.com/alummox/p/11343269.html

时间: 2024-08-05 17:46:08

javascript模板字符串(反引号)的相关文章

ES6中的模板字符串---反引号``

在react中,反引号``有特殊的含义. 如MDN中所述,模板字符串(Template literals)允许嵌入表达式,并且支持多行字符串和字符串插补特性.基本语法为以下几种: 其中第一行为最基本用法,即使用反引号 ('`') 来代替普通字符串中的用双引号和单引号. 第二行为多行字符串用法,即反引号中文本可以直接接受换行而不必使用\n换行符来强制换行. 第三行则为模板字符串的最核心用法,即反引号中的${expression}占位符中expression可以为任意的JavaScript表达式,甚

多行字符串,引号与反引号

大家都知道写 js 时,字符串都是用单引号或者双引号引着的,而一行写不下回车换行的时候,会被自动变成多段字符串并用 + 号来拼接上,比如这样: <!DOCTYPE html> <html> <head> <meta charset='utf-8'> </head> <body> <div id='d1'>111</div> <script> document.write( '<style>

ES6的全新特性:模板字符串

作为JavaScript的未来,ES6已经到来.作为已完成的标准,ES6带来了许多新特性使其在如今的web世界仍有竞争力.ES6的方方面面不一定全都适合你,本文集会简要介绍一些顺手且可行的新特性. 我编写JavaScript代码更喜欢使用单引号来定义字符串,而不是双引号.对JavaScript来说两者都可以,下面的两行代码其实作用相同: var animal = "cow"; var animal = 'cow'; 我更喜欢单引号是有原因的.首先,单引号在组合使用HTML字符串和引用属

ES6模板字符串

看了阮老师的ES6入门再加上自己的一些理解整理出的学习笔记 介绍: 样子: `` 反引号,tab上面的那个键,同该符号包裹的字符串能够带来的功能如下: 可以包涵换行 在反引号以内,可以有多个换行,都能够在使用的时候被识别 可以嵌入变量 使用美元符号和大括号包裹变量${对象名.属性名} 可以原生输出  原生输出包含转义字符串的内容String.raw模板字符串 例子: 传统的JavaScript语言,输出模板通常是这样写的,字符串拼接很让人头疼,也很容易出错. $('#result').appen

深入浅出ES6(四):模板字符串

作者 Jason Orendorff  github主页  https://github.com/jorendorff 反撇号(`)基础知识 ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings).除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与普通字符串并无二致.在最简单的情况下,它们与普通字符串的表现一致: context.fillText(`Ceci n'est pas une chaîne.`, x, y); 但是我们并

ES6 模板字符串Template String

1. 模板字符串简介: 顾名思义,模板字符串是用来定义一个模板是使用的,就像Vue,React中的template语法. 首先,先来了解一下template string的基本用法: 在ES5中,我们大多都有过拼串的经历吧. const person = { name: 'zhang', age: 18, hobby: 'coding', introduce () { console.log('hello, everyone , my name is ' + this.name + ', I a

前端学习-02 jQuery结束each循环、模板字符串、css的@charset

jQuery的each方法结束循环 let arr = [1, 5, 7, 2, 8, 9]; $(arr).each(function(index, item) { if(item == 5) { return true; // 相当于 continue, 进行下一次循环 } if(item == 8) { return false; // 相当于break, 结束循环 } console.log(item); // 1 7 2 }) 控制台打印结果:1  7  2 模板字符串 字符串拼接繁琐

JavaScript String 字符串方法

JavaScript String 字符串方法汇总 1.str.indexOf() 方法查找字符串中的字符串  返回   字符串中指定文本首次出现的索引(位置) JavaScript 从零计算位置.0 是字符串中的第一个位置,1 是第二个,2 是第三个 ... 无法设置更强大的搜索值(正则表达式) var str = "The full name of China is the People's Republic of China."; var pos = str.indexOf(&q

前端javascript模板

doT.js——前端javascript模板引擎问题备忘录 我手里维护的一个项目,遇到一个问题:原项目的开发人员在Javascript中,大量的拼接HTML,导致代码极丑,极难维护.他们怎么能够忍受的了这么丑陋.拙劣的代码呢,也许是他们的忍受力极强,压根就没想去寻找解决方法. 可是,我,是万难不能接受这种丑陋的解决方式的.有没有优雅的解决方法呢,于是在网上搜索到了doT.js. 主页很简洁,就一个页面,研究了一下,就顺利的上手了,相当的简单易用.主要分两步走. 1.写模板 写模板,就用官方文档里