0

在写Javascript代码的时候,感觉很怀念Ruby的#{}方法,所以我用JS来实现。但是这段代码并不干净漂亮。我想让这种方法安全,但我做不到。
你知道这段代码是安全的还是美观的?提前致谢。

String.prototype.to_s = function(){
    var str = this.toString();


    // convert function is bad  because it use eval...
    var convert = function(s){
        return eval(s);
    };

    // It's slower because call ReGexp method too many times.
    while(/#{(\w+)}/.test(str)){


        var matchStr =RegExp.$1;

        var str = str.replace(/#{(\w+)}/,convert(matchStr));

    }
    return str;
};



var name = "nobi";

var age = 23;

var body = "I'm #{name} and I am #{age} years old".to_s();
// I'm nobi and I am 23 years old.


console.log(body);
4

3 回答 3

3

这种 hack 不能变得“漂亮”——它甚至不适用于非全局变量。但是,鉴于 ES6 支持,您不需要 hack。字符串插值现在是语言的一部分。

var body = `I'm ${name} and I am ${age} years old`;

如果做不到这一点,字符串连接通常在 ES5 及更早版本中是可读的:

var body = "I'm " + name + " and I am " + age + " years old";

CoffeeScript是一种编译为 JavaScript 的语言,也支持此功能。

于 2012-08-08T16:30:33.813 回答
3

与您想要的最接近的是模板系统,例如mustache。它使您可以执行以下操作:

var person = {
  name: "nobi",
  age: 23
};

var output = Mustache.render("I'm {{name}} and I am {{age}} years old.", person);
于 2012-08-08T16:34:17.693 回答
0

或者使用咖啡脚本。

http://coffeescript.org/#strings

也不#{}是Ruby中的方法,它被称为“字符串插值”。

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#Interpolation

于 2012-08-08T16:32:31.700 回答