脱咖啡因:双括号
Decaffeinated: Double Brackets
我最近取消了一个旧项目,我注意到我有很多 if clauses
表达式被包裹在 "extra" 括号中:
if ((data == null) || (data === ""))
有没有需要包裹的情况?恕我直言,它与以下内容相同:
if (data == null || data === "")
通过显式检查,您可以省略比较周围的括号,因为 operator precedence of ==
/===
over logical OR ||
.
if (data == null || data === "")
在那种情况下没关系,但无论何时从 if
语句(或几乎任何地方)中删除括号,请确保检查 precedence table.
例如,从中删除括号:
if ((someVar && someConditional) == someBool)
会导致:
if (someVar && someConditional == someBool)
这是完全不同的。由于括号的缘故,第一个示例将首先计算 someVar && someConditional
,然后计算 resultOfOperation == someBool
。在第二个示例中,由于 &&
的优先级较高,因此首先评估 someConditional == someBool
,然后评估 0 && resultOfOperation
。
我最近取消了一个旧项目,我注意到我有很多 if clauses
表达式被包裹在 "extra" 括号中:
if ((data == null) || (data === ""))
有没有需要包裹的情况?恕我直言,它与以下内容相同:
if (data == null || data === "")
通过显式检查,您可以省略比较周围的括号,因为 operator precedence of ==
/===
over logical OR ||
.
if (data == null || data === "")
在那种情况下没关系,但无论何时从 if
语句(或几乎任何地方)中删除括号,请确保检查 precedence table.
例如,从中删除括号:
if ((someVar && someConditional) == someBool)
会导致:
if (someVar && someConditional == someBool)
这是完全不同的。由于括号的缘故,第一个示例将首先计算 someVar && someConditional
,然后计算 resultOfOperation == someBool
。在第二个示例中,由于 &&
的优先级较高,因此首先评估 someConditional == someBool
,然后评估 0 && resultOfOperation
。