var basepath = "${basepath}"要打引号,那么非字符串类呢?
比如 var list = "${list}"把el表达式中的list赋值给js中的list要打引号吗
这样赋值后,可以在js里给list做循环等操作吗?
不可以,如果你的是数字可以不打引号;
你后端传过来的是list,其实在传输过程中也是toString后传的;
并不是你的后台对象了;
所以建议你要么转化成json传过来,要么自己拼接好传;
希望可以帮到你....
得看你的标签有什么内容,如果是一个字符串需要用引号,并且注意转移字符串中存在的引号,如你用''括起,你的标签内容要将'替换为\',要不字符串不闭合,"同理
如果是数字,true/false,或者json字符串,不需要引号括起
总的来说就是只要最后编译后输出到客户端的内容符合js语法就不需要引号
不用打引号,但是建议不要这样写,
可以在页面上写个input type为hidden,然后赋值给value,然后再通过js获取
先解释一下基本原理吧。你这个页面要么就是jsp页面,要么就是用了freemarker、velocity等模板。加载这个页面之前会先把这个页面进行渲染,通俗点说就是把数据填充上去,完成之后就相当于一个静态的html页面,这时候才会有js的事情。注意了,也就是说el表达式的${list}变量和js的list变量是没有太大关系的。${list}的效果就只是一个串字符,不管${list}是数组对象还是字符串或者数字,是对象的话会自动调用后台对象的toString()的方法转为字符串。
还有用例子说话吧(假设是jsp,后台就是用java):
jsp页面
<body>
<%
String list1 = "hello";
int list2 = 1;
String[] list3 = {"aaa","bbb","ccc"};
String list4 = "[\"aaa\",\"bbb\",\"ccc\"]"; // json数组
request.setAttribute("list1", list1); // el表达式的值实际上就是从 request对象中attribute来取的
request.setAttribute("list2", list2);
request.setAttribute("list3", list3);
request.setAttribute("list4", list4);
%>
<script type="text/javascript">
var list1 = "${list1}";
//var list1_num = ${list1}; // 这里是会报错的 因为 ${list}是hello,并不是数字
var list2 = "${list2}";
var list2_num = ${list2};
var list3 = "${list3}"; // ${list3}实际上是后台中的list3.toString();
// 上面可以看出 ${list}就只是一串字符
// 如果想使用循环看下面
// 1.使用后台语言循环
<%
for(int i=0 ; i<list3.length; i++){
%>
var list3_<%=i%> = "<%=list3[i]%>"; // 看到这句话你会更明白什么是先渲染数据 生成了html页面 才有js的事
<%
}
%>
// 2.转为js数组再循环
var list3_array = ["${list3[0]}","${list3[1]}","${list3[2]}"];
var list4 = '${list4}'; // 因为json格式是双引号的,所以这里用单引号,其实js里面用单引号多一点
var list4_array = JSON.parse(list4);
console.log(list4_array);
</script>
</body>
运行效果图