2

有没有比字符串连接更好的方法在 JavaScript 中构建字符串?

如果我可以做一些像 ruby​​ 这样的事情,你可以在字符串中扩展变量而不是做很多“foo”+bar+“baz”,它会让我的代码更干净。

4

8 回答 8

7
String.prototype.format = function() {
  var args = arguments;
  return this.replace(/{(\d+)}/g, function(match, number) { 
    return typeof args[number] != 'undefined'
      ? args[number]
      : match
    ;
  });
};


console.log("{0} bar {1}.".format("foo","baz"));

将产生:

“富吧巴兹”

于 2012-04-13T16:11:40.280 回答
1

Chris Nielsen这个答案中提供了一个纯 JavaScript 解决方案:

String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));

您还可以使用 CoffeScript,它是一种编译为 JavaScript 的语言。它支持字符串插值

author = "Wittgenstein"
quote  = "A picture is a fact. -- #{ author }"
于 2012-04-13T16:15:53.363 回答
1

对不起,伙计们,但这一切都不是很红宝石的方式,这是一个基本的 p 等价物,对不起 eval,这肯定可以做得更好..如果你只是想要连接,只需在第一个 return 替换 document.write解决方案

function p(str){
  document.write(str.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>");
}

String.prototype.p = function() {
  return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>";
};


var f="foo", b="bar"
p("#{f} #{b}")
document.write("#{f} #{b}".p());

=> foo bar
=> foo bar

编辑:我添加了一个原型版本,对此有一些困难

于 2012-04-13T19:49:39.553 回答
0
var myStr = [];

myStr.push('something')

console.log(myStr.join(""))
于 2012-04-13T16:11:11.327 回答
0

如果您处理大量字符串,那么使用一个数组,其中push包含字符串部分并在末尾join(以空字符串作为分隔符)似乎是跨平台最有效的。

于 2012-04-13T16:11:23.547 回答
0
于 2012-04-13T16:14:37.470 回答
0

pylover 的回答会给你一些你想要的东西。

您可能还会研究CoffeeScript,它是一种很好的语言,可以编译为 JavaScript 并具有字符串插值以及其他(可能太多)功能。

于 2012-04-13T16:16:47.130 回答
0

它被称为语法糖。

var a = 2;
var b = 4;
var c = "together";

var text = `Add ${a*b} elements ${c}.`;
console.log(text)

// "Add 8 elements together." (515,988,604 op/sec) 

对比

var text = "Add" + " " + a*b + " " + "elements" + " " + c + ".";
console.log(text)

// "Add 8 elements together." (511,188,184 op/sec 0.73% slower)

第一种方法更快更好阅读。

此处测试的性能:JSPerf 字符串测试

于 2018-03-31T07:55:54.620 回答