[原]JS Eval参数单引号问题
最近在弄JS验证功能的时候 遇到了Eval的参数问题,花了些时间解决之后,稍微总结了下。
问题示例:
<HTML>
<BODY>
<script>
var test =
{show:function(str){alert(str);}}
var s = "ffd'd" ;
eval("test.show('" +s + "')");
</script>
</BODY>
</HTML>
执行会报缺少')'
方法一: 使用转义符
<script>
var test =
{show:function(str){alert(str + 'test');}}
var s = "ffd'd" ;
eval("test.show('" +s.replace(/\\/g,"\\\\").replace(/'/g,"\\\'") + "')");
</script>
方法二:把方法参数作为JS类的属性
<script>
var test = {show:function(){alert(this.str);},str:''};
var s = "ffd'd" ;
test.str = s;
eval("test.show()");
</script>
方法三: 使用call
<script>
var test = {show:function(str){alert(str);}};
var s = "ffd'd" ;
var func = eval("test.show");
func.call(func,s);
</script>
方法四:最简单的方法,使用function对象
<script>
var test = {show:function(str){alert(str);}};
var s = "ffd'd" ;
var func = eval("test.show");
func(s);
</script>