在项目前端中,常常会对参数进行拼接,这里简单的记录下,毕竟是自己踩过的坑。
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报错,经过研究发现了正确的写法,如下:
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';