最近在弄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>