"no-return-assign" - 带括号和不带括号赋值的区别

The "no-return-assign" - Difference between Assignment with and without Parentheses

no-return-assign 不允许在 return 语句中赋值。但默认情况下,当您将作业放在括号中时,它会允许它。

return (foo = 1 + 1)return foo = 1 + 1 在技术上有区别吗?

我有这个问题是因为我尝试了以下

return createMatrixRow(
  width,
  element,
  addWidth,
  elements.concat(addWidth ? Object.assign({}, element, (element.position.width = width)) : element)
)

为了避免出现错误消息,我将 element.position.width = width 放在括号中。

没有区别。在这两种情况下,它们都形成一个表达式,除了 parens,该表达式是分组运算符,它接收原始赋值表达式和 returns 它的结果。

使用 parens 手动覆盖看起来像错误的分配是 linter 的一个相当普遍的特征。

例如,这通常会惹恼 linter:

while (x = re.exec(data)) {
  // do work
}

原因是作为条件的赋值通常是错字,而 == 是有意的。

但这往往会满足它:

while ((x = re.exec(data))) {
  // do work
}

否则多余的 parents 是 "yes, I know this is an assignment, so I'll wrap it with these unnecessary parens to indicate that".

的一种表达方式

报表

return foo = 1 + 1;

return (foo = 1 + 1);

就 JavaScript 语义而言是相同的。