eval函数动态拼接已有变量名的妙用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cainiaobulan/article/details/81086912

在项目前端中,常常会对参数进行拼接,这里简单的记录下,毕竟是自己踩过的坑。

var holiday_y1 = "111" ; 
var holiday_y2 = "222";
var holiday_y3 = "333";

如上有以上三个变量,_y1 _y2 _y3,不同的情景使用不同的变量。

场景:_y后的数字根据接收的参数id(val=1/2/3)来决定使用哪个变量,则可以这样

var vars_name = 'holiday_y' + id; //拼接变量名

测试结果:

这时候的结果不是我们期望的“111”,  eval() 函数可计算某个字符串,并执行其中的的 javaScript代码,下面附上代码:

var holiday_y1 = "111" ; 
var holiday_y2 = "222";
var holiday_y3 = "333";

function test(id)  
{  

  var vars_name = 'holiday_y' +id; 
  console.log(vars_name);
  console.log(eval(vars_name));
} 

测试结果就是我们预期的那样:

这里附上另一个踩过的坑,也是关于参数拼接的。

在做项目时候要将链接触发一个事件,需要拼接函数名称而且动态传入参数,结果参数引号一直引起js报错,经过研究发现了正确的写法,如下:

扫描二维码关注公众号,回复: 4932325 查看本文章

1.当函数只有一个参数时候,按照下面的写法即可,即在参数中用单引号引用就行

 "<a href='javascript:void(0);' title='删除'  onclick=\"deleteCpmx(' "+cjid+" ')\"><span style='color:blue'>删除</span></a>";

2.当函数中有两个以上的参数时候,按照下面的写法

这个时候第一个参数前面的双引号会被自动加入单引号引起来,如果再添加引号就多余了会导致js报错。

"<a href='javascript:void(0);' title='删除'  onclick=\"deleteCpmx("+pkey+",' "+cjid+" ')\"><span style='color:blue'>删除</span></a>";

下面这段代码是用来提示自己的,各位可以忽略:

for ( var key in json.message) {
  if(key == "-1"){
    //var value = json.message[key];
        content += "<tr style='height:20px'>"+
         "<td style='border-bottom:1px solid #b1c3dd;' width='100px;' align='center'>下载</td>"
    +
         "<td style='border-bottom:1px solid #b1c3dd;'><a href= '"+json.message[key]+"'  target=\'_blank\' >点击下载异常数据</a></td>"
    +
        "</tr>";
  }else{
         content += "<tr style='height:20px'>"+
         "<td style='border-bottom:1px solid #b1c3dd;' width='100px;' align='center'>"+key+"</td>"
    +"<td style='border-bottom:1px solid #b1c3dd;'>"+json.message[key]+"</td>"+
         "</tr>";
    }
}

<a href= '"+json.message[key]+"'  target=\'_blank\' >点击下载异常数据</a>  这一段的注意下.

op = ['<a href="javascript:updateLabelStatus(\''+ row.idStr + '\',\'2\');">启用</a>','<a href="javascript:update(\''+ row.idStr +'\');">编辑</a>','<a href="javascript:del(\''+ row.idStr +'\');">删除</a>'];

一个是包字符串常量用的('<a href="javascript:updateLabelStatus(\')    一个是包变量用的('+ row.idStr + ')

demo

var c="3";
var d="abc("+c+")"+"bcd";
var e="abc('"+c+"')"+"bcd";

var f='abc('+c+')'+'bcd';
var g='abc(\''+c+'\')'+'bcd';

猜你喜欢

转载自blog.csdn.net/cainiaobulan/article/details/81086912
今日推荐