在 JavaScript 中,_模板字符串_可以在字符串中嵌入表达式,也被称为字符串插值。
这一功能扩展了内置的String全局对象的功能。
在 JavaScript 中,你可以用反引号包裹文本来创建模板字符串。 模板字符串不仅允许文本包含换行和其他特殊字符,还可以嵌入变量和其他表达式。
const num1 = 1;
const num2 = 2;
`Adding ${num1} and ${num2} gives ${num1 + num2}.`;
// => Adding 1 and 2 gives 3.
在上面的例子中,反引号(``)用于表示模板字符串。${...}是用于替换的占位符。
任何非字符串类型都会被_隐式_转换为字符串。
这一话题在类型转换概念中有所介绍。
各种类型的表达式都可以用于模板字符串。
const track = 'JavaScript';
`This track on exercism.org is ${track.toUpperCase()}.`;
// => This track on exercism.org is JAVASCRIPT.
当你需要让字符串跨多行排版时:
`This is an example of using template
strings to accomplish multiple
lines`;
借助可用的替换能力,你还可以在过程中引入逻辑,来决定输出的字符串应该是什么。
一个例子就是嵌入三元运算符。
这个运算符是编写if/else语句的简写形式。
语法是condition ? consequent-expression : alternative-expression。
如果条件为真值,就会返回冒号左侧的操作数。
否则,三元表达式的结果就是冒号右侧的操作数。
const grade = 95;
`You have ${grade > 90 ? 'passed' : 'failed'} the exam.`;
// => You have passed the exam.
在本练习中,你将编写代码,帮助一家标牌公司为他们的标牌制作自定义信息。
实现函数 buildSign(occasion, name),它接受一个字符串作为 occasion 形参,并接受一个存放某人姓名的字符串作为 name 形参。
这两个形参会嵌入到一个模板字符串中,输出标牌上的信息。
buildSign('Birthday', 'Rob');
// => "Happy Birthday Rob!"
实现函数 buildBirthdaySign(age),它接受一个年龄,并根据年龄决定标牌上信息的一部分。
如果年龄为 50 或更大,标牌会称用户为 mature;否则称其为 young。
确切期望的输出如下所示:
buildBirthdaySign(50);
// => "Happy Birthday! What a mature fellow you are."
buildBirthdaySign(45);
// => "Happy Birthday! What a young fellow you are."
实现函数 graduationFor(name, year),它接受一个字符串形参作为姓名,接受一个数字形参作为年份,并使用字符串插值生成标牌上的短语,其中用换行符分隔信息的两行。
graduationFor('Hannah', 2022);
/* => "Congratulations Hannah!
Class of 2022"
*/
实现函数 costOf(sign, currency),它接受一个存放标牌内容的字符串和一个表示货币的字符串。
标牌的基础价格是给定货币的 20。此外,每个字母花费 2。(空格也计入计算。)
返回的短语包含制作标牌的费用,费用写成小数点后两位,后面跟着货币字符串。
costOf('Happy Birthday Rob!', 'dollars');
// => "Your sign costs 58.00 dollars."