关于意外字符串连接的 ESLint 错误

ESLint error about Unexpected String Concatenation

我有以下内容:

return (useWordBoundary ? subString.substr(0, subString.lastIndexOf(' ')) : subString) + '\u2026';

Eslint 拒绝我的代码说:

Suggest using template literals instead of string concatenation. (prefer-template)

以上有什么问题吗?

基于that rule's documentation,它只是用+ 标记任何字符串连接。相反,它建议使用 ES6 模板文字。以下是您在代码中的做法:

return `${(useWordBoundary ? subString.substr(0, subString.lastIndexOf(' ')) : subString)}\u2026`;

您可以在此处阅读有关模板文字的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

模板文字也称为字符串插值。

您的代码必须遵循以下语法:

return `${(useWordBoundary ? subString.substr(0, subString.lastIndexOf(' ')) : subString)} '\u2026'`;

看到了吗?没有必要使用 + 运算符连接。

var greeting = "Hello";

var completeGreeting = `${greeting} World!`;

console.log(completeGreeting);
看?该字符串是使用此表达式中的参数构建的:${}

资源

确实是个风格问题。在您的示例中,可以说使用模板文字没有太多好处:

return `${useWordBoundary ? subString.substr(0, subString.lastIndexOf(' ')) : subString}\u2026`;

在其他情况下,它使代码更具可读性:

return `Hello, ${name}!`;

// vs.

return 'Hello, ' + name + '!';

如果您愿意,可以通过评论有选择地禁用特定行的规则

// eslint-disable-next-line prefer-template
return (useWordBoundary ? subString.substr(0, subString.lastIndexOf(' ')) : subString) + '\u2026';

这是一个使用 eslint 的不同示例 错误:意外的字符串连接 |首选模板:

(是)

const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);

对比

(否)

const value = '; ' + document.cookie;
const parts = value.split('; ' + name + '=');

在我的案例中,我发现它不仅对模板相关变量有用,而且对脚本变量也有用,例如: 我在连接时收到此错误,因为它是这样的:

   if ($('#' + data.id_field).children().length === 0) {
  $(e.target).prepend($(e.target), ContactWrapper);
}

所以我用这样的方法修复了它:

    if ($(`#${data.id_field}`).children().length === 0) {
  $(e.target).prepend($(e.target), ContactWrapper);
}

希望这个例子对您有所帮助!