好问题。
首先,我同意给你留下这段代码的开发者应该是 LARTed。
但是,如果您认为条件运算符的语法是or并且最长可能的匹配获胜,您可以弄清楚这一点(没有Eclipse JSDT等代码格式化程序) 。LogicalORExpression ? AssignmentExpression : AssignmentExpression
… : AssignmentExpressionNoIn
属于同一原子条件操作的相邻表达式不能在两边用 s 或 s 分隔,因为?
语法:
不允许这样做。因此,只需将自己置于根据 ECMAScript 语法工作的 LL(n) 解析器的位置;-) 反复问自己一个问题:“这段代码可以由该目标符号的产生式生成吗?”;如果答案是“否”,则回溯到较短的匹配,直到可以,或者如果没有生产工作,则失败并出现语法错误。
return
(
value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant
)
;
return (value == null ?
(
name.local ? attrNullNS : attrNull
)
:
(
typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant
)
);
return (
(
value == null
)
? (name.local ? attrNullNS : attrNull) : (
(
typeof value === "function"
)
?
(
name.local ? attrFunctionNS : attrFunction
)
:
(
name.local ? attrConstantNS : attrConstant
)
));
所以:
if (value == null)
{
if (name.local)
{
return attrNullNS;
}
else
{
return attrNull;
}
}
else
{
if (typeof value === "function")
{
if (name.local)
{
return attrFunctionNS;
}
else
{
return attrFunction;
}
}
else
{
if (name.local)
{
return attrConstantNS;
}
else
{
return attrConstant;
}
}
}
(CMIIW。)这可以进一步简化为
if (value == null)
{
if (name.local)
{
return attrNullNS;
}
return attrNull;
}
if (typeof value === "function")
{
if (name.local)
{
return attrFunctionNS;
}
return attrFunction;
}
if (name.local)
{
return attrConstantNS;
}
return attrConstant;