else if判断语句,在C语言中是这样描述的,否则语句总是与它最近的if语句相配的,
但是如果用{}改变了作用域之后,在C语言中就不一样了,比如:
1、if(a==1) {
2、}else if( b==2){
3、 if(c==3){}
4、}else if(d==10){
5、}
对于C语言,第3行的if(c==3){}与第4行的否则语句不相干,但是对于javascript就不一样了,因为它的{}不代表作用域的范围,
所以,第4行的else if(d==10){}仍然是与第3行的否则如果配对。
在实际工作中我也遇到了这样的问题,比如设置菜单的一小段程序:
开始像这样:
//-------------设置右键菜单-------------- //console.log(event.get("name")); if (mapTools.hasValue(features[0], "开关")){ var name=features[0].get("name"); if(name.indexOf("联")!=-1){ $("#contextmenu_container").setMenu("联络开关"); }else{ $("#contextmenu_container").setMenu("其它开关"); } }else if (mapTools.hasValue(features[0], "变压器")){ $("#contextmenu_container").setMenu("变压器"); }else if(features.length>0){ if (features[0].getGeometry().getType()==="LineString") { $("#contextmenu_container").setMenu("LineString"); } }else if(mapTools.hasValue(features[0], "变电站")){ $("#contextmenu_container").setMenu("变电站"); }else if(mapTools.hasValue(features[0],"环网箱")){ $("#contextmenu_container").setMenu("环网箱"); }else if(mapTools.hasValue(features[0],"配电房")){ $("#contextmenu_container").setMenu("配电房"); }
结果,当点击地图上的变电站,环网箱,配电房时,它是怎么都不显示出菜单来。
后来将顺序调动一下成这样:
//-------------设置右键菜单-------------- //console.log(event.get("name")); if (mapTools.hasValue(features[0], "开关")){ var name=features[0].get("name"); if(name.indexOf("联")!=-1){ $("#contextmenu_container").setMenu("联络开关"); }else{ $("#contextmenu_container").setMenu("其它开关"); } }else if (mapTools.hasValue(features[0], "变压器")){ $("#contextmenu_container").setMenu("变压器"); }else if(mapTools.hasValue(features[0], "变电站")){ $("#contextmenu_container").setMenu("变电站"); }else if(mapTools.hasValue(features[0],"环网箱")){ $("#contextmenu_container").setMenu("环网箱"); }else if(mapTools.hasValue(features[0],"配电房")){ $("#contextmenu_container").setMenu("配电房"); }else if(features.length>0){ if (features[0].getGeometry().getType()==="LineString") { $("#contextmenu_container").setMenu("LineString"); } }
以后碰到这种情况后,将判断语句的顺序调换一下,看能不能成。