ES6何时使用String.raw而不是默认模板文字

时间:2015-10-26 21:18:50

标签: javascript string ecmascript-6

我正在尝试连接一堆字符串以在Javascript中构建查询字符串。以前我通过丑陋的字符串连接实现了这一点:

var queryString = "?action=" + actionValue + "&data=" + dataValue";

但是使用ES6,我发现有一些新的方法可以帮助我用更好看的代码实现相同的结果,比如C#6中的字符串插值:

string s = $"action={actionValue}&data={dataValue}"

我已经使用默认模板文字和String.raw进行了测试,虽然每个模板的语法略有不同,但它们都有效。我倾向于在我的最终副本中使用String.raw,因为它不允许对字符串进行标记,因此将来会像默认模板文字一样进行修改。

虽然它在MDN docs中确实String.raw基本上调用了默认的模板文字方法,但我更喜欢String.raw的语法...我正在调用{{1}我正在格式化我的字符串的花括号内的方法,所以也许这是对String.join的误用。

是否有任何ES6向导能够启发并提供一个优于另一个的理由?

我的代码:

String.raw

2 个答案:

答案 0 :(得分:5)

模板文字生成一个字符串。如果您使用String.raw,您将获得该字符串的原始形式:

`a\tb`;           // "a b"
String.raw`a\tb`; // "a\tb"

因此,只有在需要原始表单时才应使用String.raw

答案 1 :(得分:3)

不,使用String.raw对你没有意义。

您应该编写自己的模板标记,以执行必要的URL编码并以您喜欢的方式处理数组。

function myUrl(parts) {
    var url = parts[0];
    for (var i=1; i<arguments.length; i++) {
        var val = arguments[i];
        if (Array.isArray(val))
            val = val.join(",");
        url += encodeURIComponent(val);
        url += parts[i];
    }
    return url;
}

然后你可以使用

window.open(myUrl`@Url.Action("DownloadMultiple")?inIds=${inData}&outIds=${outData}&truckId=${truckId}`);