【问题标题】:The "no-return-assign" - Difference between Assignment with and without Parentheses“no-return-assign” - 带括号和不带括号的赋值之间的区别
【发布时间】:2023-03-19 10:45:01
【问题描述】:

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

【问题讨论】:

  • 分组运算符可以改变计算的顺序,但它不会改变单个表达式的结果。 IE。 foo(foo) 完全一样。

标签: javascript ecmascript-6 return eslint parentheses


【解决方案1】:

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

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

例如,这通常会惹恼 linter:

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

原因是作为条件的赋值通常是一个拼写错误,而 == 的本意是。

但这通常会满足它:

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

其他多余的父母是一种表达方式“是的,我知道这是一个作业,所以我会用这些不必要的括号包裹它以表明”

【讨论】:

    【解决方案2】:

    声明

    return foo = 1 + 1;
    

    return (foo = 1 + 1);
    

    就 JavaScript 语义而言是相同的。

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 2012-05-05
      • 2021-06-29
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多