【问题标题】:Can we use JS concat() inside Template literals (Template strings)?我们可以在模板文字(模板字符串)中使用 JS concat() 吗?
【发布时间】:2020-09-29 07:02:05
【问题描述】:

我正在尝试使用模板字符串创建一个 URL,例如 -

a = {
    link: {
        pathname: `${url.split('?')[0]}${userId}/items?userType=${userId}}`
    },
};

上面的 sn-p 工作得非常好,下面的也是。 但是我们应该在像下面的 sn-p 这样的模板字符串中使用 concat() 吗?

a = {
    link: {
        pathname: `${url
            .split('?')[0]
            .concat(`${userId}/items?userType=${userId}`)}`,
    },
};

为什么我使用 concat() 因为在我的情况下,我启用的 linting 设置会为第一个设置抛出错误,因为它应该用两行编写,但它需要一个新的行或空格,因为我们给出的不是对我们来说是有利的,因为我们正在创建 URL。

如果不是,为什么? 只是好奇。

【问题讨论】:

  • 这里不需要使用字符串模板,从整个表达式中删除`${}` 会导致相同的结果。
  • 是的,您可以在模板文字内插表达式中使用任何类型的操作和函数,包括+.concat(),但是将静态字符串放入模板文字中只是很奇怪。 “不受欢迎”是什么意思?
  • 确实; `${expression}` 只是 expression 变成了一个字符串;如果expression 已经是一个字符串,那完全没有意义。

标签: javascript concat stringtemplate


【解决方案1】:

给你两个答案:

  1. 替换的内容 (${...}) 可以是任何表达式。可以在那里进行方法调用。

  2. concat 在这种特殊情况下似乎是一个奇怪的选择,因为不需要它。出于这个原因,从风格的角度来看,我会使用第一个版本。但这是一种风格,如果您愿意,可以使用concat。请注意VLAZ's point,一旦你这样做了,整个表达式已经生成了你想要的字符串,你根本不需要模板文字。

所以我要么使用你的原件:

a = {
    link: {
        pathname: `${url.split('?')[0]}${userId}/items?userType=${userId}}`
    },
};

或者如果你喜欢concat:

a = {
    link: {
        pathname: url
            .split('?')[0]
            .concat(`${userId}/items?userType=${userId}`)},
    },
};

【讨论】:

    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多