在javascript中eval()函数功能就是执行一段javascript代码字符串,相当于SQL里的execute(执行一条动态拼接出的SQL,经常用到)。w3school中介绍eval时说,它的功能强大,但使用到的情况却不多。先附上两个简单例子:
1.eval("1+2")  很简单,返回1+2的结果3,很多文章首先就以它为例,实际上似乎很少用到
2.动态获取表单元素:

1eval的妙用:条件判断的解析 function SetInputValue(inputName){
2eval的妙用:条件判断的解析 var input = eval("document.form1." + inputName);
3eval的妙用:条件判断的解析    input.value = "test";
4eval的妙用:条件判断的解析  }

  初学javascript时经常这样写,只需用getElementById等方法代替即可,用jQuery的选择器就更简单了。
另外,据网友测试的结果,eval的效率会低一些。
步入正题,在写webform时会碰到根据form中栏位的值来判断,例如根据金额栏位来决定表单流程的签核权限,或N次and、or逻辑组合起来的判断条件。这些“无价值”的判断是易变的,user就是上帝,说改就得改,这种hardcode越来越多,后续变得不易维护,此时便有必要将“条件判断”提取出来。将这个条件判断表达式用以字符串的方式存储起来,调用时用eval执行即可。
改版前:

1eval的妙用:条件判断的解析if(Money >= 1000)
2eval的妙用:条件判断的解析{
3eval的妙用:条件判断的解析 //需要部级主管签核
4eval的妙用:条件判断的解析}
5eval的妙用:条件判断的解析if(Money >= 10000)
6eval的妙用:条件判断的解析{
7eval的妙用:条件判断的解析 //需要总经理签核
8eval的妙用:条件判断的解析}
9eval的妙用:条件判断的解析

  用eval后:

1eval的妙用:条件判断的解析function GetAdmin()
2eval的妙用:条件判断的解析{
3eval的妙用:条件判断的解析    通过XHR将表单数据提交给后台处理程序,返回相应结果
4eval的妙用:条件判断的解析}

  签核权限在Table中维护好:
栏位:条件表单式  结果
数据:if(${Money} >=1000){"true"}  部级主管
if(${Money} >=10000){"true"}  总经理
后台处理程序将Money的实际值去替换${""},即变成可执行的js代码,eval后得到true即表示满足此条件,程式即返回相应的“结果”。例如可以写更复杂的条件表达式:

1eval的妙用:条件判断的解析 if(${Money} >= 1000 && (${栏位A} == "on" || ${栏位B} != "on")){
2eval的妙用:条件判断的解析 if(${栏位C}){
3eval的妙用:条件判断的解析 return "true";
4eval的妙用:条件判断的解析    }
5eval的妙用:条件判断的解析 if(${栏位D}){
6eval的妙用:条件判断的解析 return "true";
7eval的妙用:条件判断的解析        }
8eval的妙用:条件判断的解析  }

  这个条件表达式在用其他界面去维护,或使用xml去配置。若碰到条件判断比较多、简单(例如只是根据某个栏位值来判断)、易变,这样的方式比较有成效。
既然if条件可以这样,那return的结果同样也可以是动态的,例如:

1eval的妙用:条件判断的解析if ("${TelNumber}" == "on") {
2eval的妙用:条件判断的解析    eval('if("${NewAdd}"=="ON"){"申請新分機號碼"}else if("${NewAdd}"=="ON2"){"使用部門已存在的分機號碼:${T22}"}else{"使用部門已存在的分機號碼:${T33}"}') + ",所在線號:${Location}"
3eval的妙用:条件判断的解析}

  嵌套使用eval返回复杂信息。
自认为算一个“妙用”吧:)

相关文章:

  • 2022-12-23
  • 2022-01-25
  • 1970-01-01
  • 2021-10-19
猜你喜欢
  • 2022-03-05
  • 2021-05-26
  • 2021-12-15
  • 2021-12-19
  • 2022-12-23
  • 2021-08-13
  • 2022-01-23
相关资源
相似解决方案