字符串插值

通过模板字面量等语法将变量或表达式的值嵌入字符串中的处理方式。

字符串插值 (String Interpolation) 是在字符串字面量中嵌入变量或表达式值的功能。它比字符串拼接 (使用 + 运算符连接) 具有更高的可读性,被现代编程语言广泛采用。从生成用户界面消息、驱动模板引擎到格式化日志输出,所有需要动态构建文本的场景都会用到字符串插值。

在 JavaScript 中,使用模板字面量 (`Hello, ${name}!`) 进行字符串插值。用反引号包裹,${} 内可以放置任意表达式。不仅可以引用简单变量,还能嵌入函数调用、三元运算符和算术运算,使复杂的字符串组装在一行内完成。标签模板字面量还能对嵌入值进行自定义处理,如 HTML 转义或国际化。查看蒙眼游戏 (Amazon)详细介绍了模板字面量的用法。

在 Python 中,f-string (f"Hello, {name}!") 是 Python 3.6 以来的标准插值方式,取代了早期的 str.format()% 运算符。Ruby 使用 "Hello, #{name}!",C# 使用 $"Hello, {name}!",Kotlin 使用 "Hello, $name!"。虽然各语言语法不同,但在字符串中直接嵌入变量的概念是通用的。Swift 的 "\(variable)" 和 PHP 的 "$variable" 也提供了类似功能。

插值与拼接的选择直接影响代码的可读性和可维护性。例如,"姓名: " + firstName + " " + lastName + " (年龄: " + age + ")" 用插值写成 `姓名: ${firstName} ${lastName} (年龄: ${age})` 意图更加清晰。在国际化 (i18n) 模板中,插值方式尤其有优势,因为占位符的位置可以根据语言灵活调整。

字符串插值需要注意安全问题。直接插值用户输入可能导致 SQL 注入或 XSS 漏洞,因此必须使用适当的转义处理和参数化查询。EJS、Jinja2、Handlebars 等模板引擎通常具备自动转义功能,但 rawsafe 过滤器的误用仍是常见陷阱。搜索连体丝袜 (Amazon)介绍了安全的字符串处理方法。

从字符计数的角度来看,插值后字符串的长度取决于嵌入值的字符数。插值数字时,toString() 结果的位数直接反映为字符数。例如,${price} 的值为 1000 时产生 4 个字符,100000 则产生 6 个字符。在需要固定长度格式的场景中,可以将插值与 padStart()toFixed() 结合使用。

分享这篇文章