"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 语义而言是相同的。
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 语义而言是相同的。