18

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

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

在 Java 中,Strings 是不可变的,并且执行上述操作会不必要地创建和丢弃Strings。Ruby 是类似的,并且有一种很好的方式来完成上述操作:

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

JavaScript 是否存在类似的东西?

4

4 回答 4

49

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

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

const name = "Nick"
const greeting = `Hello ${name}`  // "Hello Nick"
于 2017-06-12T23:49:08.647 回答
2

这在 JavaScript 中很好。没有好的内置等价物sprintfor String.format,但是,您可以构建自己的.

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

于 2013-09-30T22:32:43.873 回答
2

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 
于 2017-07-19T15:58:59.897 回答
1

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

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

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

于 2013-09-30T22:38:59.713 回答