如何在 JavaScript 字符串中插入变量?

IT技术 javascript string
2021-01-17 03:31:59

在 JavaScript 中的字符串中插入变量的最佳方法是什么?我猜不是这个:

var coordinates = "x: " + x + ", y: " + y;

在 Java 中,Strings 是不可变的,执行上述操作会不必要地创建和丢弃Strings。Ruby 是类似的,并且有一个很好的方法来做上面的事情:

coordinates = "x: #{x}, y: #{y}"

JavaScript 是否存在类似的东西?

4个回答

在 ES6 中作为“模板字符串”引入

MDN 文档:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

const name = "Nick"
const greeting = `Hello ${name}`  // "Hello Nick"
模板字符串是 ES6 的一部分,该标准出现了,并在 2013 年我发布这个问题之后由浏览器实现。尽管如此,你是对的,我会给你支票:)
2021-03-14 03:31:59
这里使用反引号有什么特别的原因吗?单引号会起作用吗?
2021-03-25 03:31:59
不,您需要使用反引号。这就是 echmascript (javascript) 知道如何将变量注入${}位置的方式。一个刻度只表示一个正常的字符串,并会被解释为这样。
2021-04-03 03:31:59

这在 JavaScript 中没问题。没有与sprintfor相当的内置等效项String.format,但是,您可以构建自己的.

不要担心“不必要的”字符串对象。这绝对是微观优化。如果您需要额外的一点点性能或内存优化,请解决它,但在分布式软件中,您可能不需要。

另外,如果这真的是常见的性能问题,我希望 JS 实现对其进行优化。我知道 Java 编译器会做这样的优化。
2021-04-06 03:31:59

https://www.npmjs.com/package/stringinject

https://github.com/tjcafferkey/stringinject

我创建了这个函数来做到这一点,它允许你传入一个字符串和一个带有键的对象,这些键将用它们的值替换字符串中的占位符值,如下所示:

var str = stringInject("My username is {username} on {platform}", { username: "tjcafferkey", platform: "GitHub" });

// My username is tjcafferkey on Github 
很确定你不小心转置了变量。你写的方式,我希望它设置 str 为“我的用户名是 tjcafferkey 上的 Github”
2021-03-18 03:31:59
好地方。在我的例子中错误地理解了它们。
2021-04-08 03:31:59

如果出于某种原因,您每秒执行多次此操作并在每次调用时多次引用字符串,您始终可以将字符串本身存储为变量。

var preX = 'x: '
  , preY = 'y: '
  , coords
  ;
coords = preX + x + preY + y;

这当然应该得到基准测试/分析的支持,但每帧创建许多字符串通常是不必要的垃圾来源,可能导致线路卡顿。

同意,我希望它会更慢。但是,我的情况是特定于每帧数百次引用相同的字符串文字(例如在具有许多动态标记点的可视化中)。优化查找的速度(将只是索引到给定的偏移量)可能不会超过每个文字的字符串创建时间。我想您对文字在某种程度上进行了优化是正确的,但这会因浏览器而异,从而使依赖于该行为实现的代码变得依赖。
2021-03-15 03:31:59
真的有一个 JS 解释器不会内联所有的原始字符串吗?我觉得这在某些浏览器上可能会更慢,因为现在引擎必须检查preX可能已更改(等)变量,而更改字符串文字是不可能的。
2021-04-08 03:31:59