我有一个带有if
语句的简单代码,如下所示:
if ((marker.category == str || $("#type").length === 0)
&& (marker.session == session || session.length === 0)) {
marker.setVisible(true);
console.log("session"+session);
} else if (marker.session == session || session.length === 0) {
marker.setVisible(true);
} else {
marker.setVisible(false);
infowindow.close(map, marker1);
}
如果我运行此代码,它将始终执行else if
条件,但是我认为if
和else if
条件不同,如何解决此问题?我知道if
和else if
可能具有部分相同的条件,但是对于运算符&&
,它应该有所不同,对吗?这真的让我感到困惑。
答案 0 :(得分:1)
在public class WebRole : RoleEntryPoint
{
private IPAddressRestrictionManager restrictionManager;
public override bool OnStart()
{
RoleEnvironment.Changing += OnRoleEnvironmentChanging;
ConfigureIPAddressRestrictions();
return base.OnStart();
}
private void ConfigureIPAddressRestrictions()
{
if (restrictionManager == null)
restrictionManager = new IPAddressRestrictionManager();
restrictionManager.RemoveRestrictions();
if (restrictionManager.IsEnabledInConfiguration())
restrictionManager.ApplyFromConfiguration();
}
/// <summary>
/// Force restart of the instance.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnRoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
if (e.Changes.Any(o => o is RoleEnvironmentChange))
e.Cancel = true;
}
}
条件下重复逻辑 AND 的一部分很奇怪。我认为,如果重构出通用部分,您也许可以更好地理解这一点。
例如
else if
如果您没有看到if (marker.session == session || session.length === 0) {
marker.setVisible(true); // same for first two conditionals
if (marker.category == str || $("#type").length === 0) { // &&
console.log("session", session);
}
} else {
marker.setVisible(false);
infowindow.close(map, marker1);
}
,则表示
console.log()
表达式的评估结果为marker.category == str || $("#type").length === 0
。
您甚至可以通过在需要时重新使用相同的布尔值来进一步简化此操作。这可以消除有助于提高可读性的false
块。我还认为,有条件地记录某些东西很奇怪,所以无论如何都要记录下来。
else
答案 1 :(得分:0)
if (marker.session == session || session.length == 0) {
marker.setVisible(true);
if (marker.category == str || $("#type").length == 0) {
console.log("session"+session);
} else { }
} else {
marker.setVisible(false);
infowindow.close(map, marker1);
}
答案 2 :(得分:0)
此代码已解决
if ( (marker.session == session || session.length === 0) && (marker.category == str)){
marker.setVisible(true);
}else if( (marker.session == session || session.length === 0) && (str.length === 0)){
marker.setVisible(true);
}else {
marker.setVisible(false);
infowindow.close(map, marker1);
}
}
情况似乎相同,但有所不同,谢谢大家对我的帮助