写JavaScript的人,几乎都干过这件事:把变量和文字用加号硬凑在一起,跟引号搏斗半天,最后得到一行自己都懒得再看第二眼的代码。
比如这样:
打开网易新闻 查看精彩图片
let name = "Pratham";
let age = 22;
let city = "Delhi";
let intro = "Hi, my name is " + name + ". I am " + age + " years old and I live in " + city + ".";
能跑。但数一下引号,数一下加号,再数一下手动敲进去的空格。如果这段字符串有三行、六个变量呢?这就是传说中的"拼接地狱"。
2015年ES6推出的模板字面量(template literals)彻底解决了这个问题。用反引号代替引号,用${}直接把变量或表达式嵌进字符串里,语法负担瞬间清零。
传统拼接有三个硬伤。第一是可读性崩塌:变量和文本交替出现,眼睛在字符串和值之间跳来跳去,中间再塞个数学表达式,阅读体验堪比解密。第二是引号噩梦:想在字符串里放引号?加反斜杠转义。单双引号混用?随时可能语法报错。第三是多行字符串:用\n换行、每行末尾加加号,代码长得跟最终输出完全不像,改起来提心吊胆。
模板字面量用一对反引号包裹,${}里面可以扔任何变量或表达式。多行直接回车,不用转义,不用拼接。HTML片段、动态消息、复杂计算,写起来跟看起来的样子基本一致。
这看似只是个小语法糖,实际改变了写字符串时的思维方式——从"怎么让代码不报错"变成"怎么表达清楚意思"。ES6发布十年后,还有人坚持用加号拼接吗?
热门跟贴