我尝试连接一个变量名,但它没有按预期工作:
<script type="text/javascript" th:inline="javascript">/*<![CDATA[*/
var jc[[${f.hash}]];
/*]]>*/</script>
结果:var jc'e4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360';
预期:var jce4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360;
答案 0 :(得分:1)
看起来你想声明一个变量由变量定义的变量。我无法弄清楚为什么,但如果真的是你想要做的事情:
您可以使用
var hash = [[${f.hash}]];
eval('var jc'+hash);
这在严格模式下无效。如果实施某些安全策略,它也将无法工作。
如果要在全局范围内创建变量,还可以使用
var hash = [[${f.hash}]];
window['jc'+hash] = undefined; //In browser application
global['jc'+hash] = undefined; //In node.js environment
或者如果你想在函数中声明一个变量
this['jc'+hash] = undefined;
注意:尽管JS sintax允许您使用所有这些选项,但我不建议您执行此操作,无论您遇到什么问题。它被认为是一种糟糕的做法,我99%肯定它可以在不使用奇怪的技巧的情况下完成。难以维护的代码并不酷。任何阅读此内容的人都很难理解为什么会这样。
答案 1 :(得分:0)
在我需要创建一堆具有不同名称的handler
个javascript对象时,我遇到了一些相同的问题。
我在我的javascript代码中使用了以下内容
<script th:inline="javascript">
/*<![CDATA[*/
var handler[[${iter.index}]] = new Handler();
...
handler[[${iter.index}]].close();
/*]]>*/
</script>
他的输出是这样的:
<script>
var handler0 = new Handler();
...
handler0.close();
</script>
<script>
var handler1 = new Handler();
...
handler1.close();
</script>
这正是我所需要的。