“无回报” - 带括号和无括号的分配之间的差异

时间:2017-09-24 15:18:58

标签: javascript ecmascript-6 return eslint parentheses

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

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括在括号中。

2 个答案:

答案 0 :(得分:5)

没有区别。在这两种情况下,它们形成一个表达式,除了使用parens之外,表达式是分组运算符,它接收原始赋值表达式并返回其结果。

使用parens手动覆盖可能看起来像错误的分配是一种相当常见的短语特征。

例如,这通常会使linter烦恼:

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

原因是作为条件的作业通常是一个错字,其中==是有意的。

但这通常会让它满足:

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

其他多余的父母是一种说法的方式“是的,我知道这是一项任务,所以我会用这些不必要的表来包装它以表明”

答案 1 :(得分:1)

陈述

return foo = 1 + 1;

return (foo = 1 + 1);
就JavaScript语义而言,

是完全相同的。