最近在弄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>
分享到:
相关推荐
在Python中,通过函数名调用函数是实现动态行为的有效方式。`eval`提供了最大的灵活性,但也伴随着潜在的风险。而`getattr`则更安全,适合在类的上下文中使用。选择哪种方法取决于具体的需求和安全考虑。在编写代码...
利用这些特性,我们能够通过函数名的字符串形式来动态调用函数。 接下来,我们来看看实现动态函数调用的几种方式: 1. 使用eval()函数: eval()函数可以执行字符串中的JavaScript代码,如果我们知道要调用的函数名...
在Python中,我们使用`def`关键字来定义一个函数,后跟函数名和圆括号,圆括号内可以包含函数参数。例如,`drawDigit(d)`函数接受一个参数`d`,用于绘制七段数码管。函数体内的代码则执行相应的操作。 在实验的第一...
- 在严格模式下,`eval`被视为保留字,不能被重命名,并且变量名、函数名、函数参数等不能命名为`eval`。 #### 五、eval函数的替代方案 由于`eval()`函数的安全性和性能问题,推荐使用其他方法来代替它,如使用`...
在VBScript中,`Eval`函数和`Execute`、`ExecuteGlobal`语句是三个重要的动态执行代码的工具,它们各自有不同的用途和特性。 `Eval`函数的主要功能是计算一个字符串表达式,并返回表达式的值。它适用于需要动态计算...
在严格模式下使用eval时,eval被限制在私有的上下文环境内,不能通过别名来覆盖eval函数,也不能将eval设置为变量名、函数名、函数参数或者异常捕获的参数。 6. 评估的代码安全性 eval函数会将传入的字符串当作...
- 性能方面,直接调用函数比通过变量调用更快,因为不需要额外的解析步骤。 - 为避免安全问题,确保传递给动态调用的函数名是可信的,并且避免使用未经验证的用户输入。 了解这些知识点后,开发者可以更好地利用...
2. 使用`window.eval()`:在某些情况下,如果必须使用`eval()`,可以将它限制在全局作用域,通过`window.eval()`调用,这样Closure Compiler可以识别这是一个全局操作。 3. 使用`@nocache`注释:在`eval()`前添加`/...
定义函数的基本结构包括函数名、参数列表和函数体。例如: ```javascript function sum(a, b) { var c = a + b; return c; } ``` 在这个示例中,`sum`是函数名,`a`和`b`是参数,函数体内的代码执行加法操作并...
3. 评估表达式:调用expr-eval提供的函数,传入表达式字符串,得到计算结果。 例如,对于表达式 "2 + 2 * 3",我们可以这样做: ```javascript const exprEval = require('expr-eval'); const expression = "2 + 2 ...
重载函数是指在MATLAB中,为同一个函数名定义多个版本,每个版本处理不同类型的输入参数。这在多态性中非常有用,但MATLAB不直接支持函数重载,通常通过改变函数签名(参数数量或类型)来达到类似效果。 在给定的...
这里`name`应替换为实际的属性名,如`innerHTML`、`value`等。 ### 6. 字符串转换 `document.getElementById("output").value = document.getElementById("input").value.toUpperCase();`这段代码展示了如何将输入...
当面对不确定的函数时,可以通过构造包含函数名的字符串,然后传递给`eval()`来尝试执行它。 ##### 示例代码: ```javascript function input1_onChange() { alert('input1_onChage executed.'); } var objId = ...
函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名完成功能调用。函数也可以看作一段具有名字的子程序,可以在需要的地方调用执行,不需要在每个执行地方重复编写这些语句。每次使用函数可以...
5. **`vl-cmdf`**:用于调用AutoCAD内部命令的函数,比如 `(vl-cmdf "COPY" "block1" "block2")` 复制名为block1的对象到block2。 6. **`vl-load-com`**:加载AutoLISP的动态链接库(.dll),以访问更多功能和对象...
### Python中函数eval和ast.literal_eval的区别详解 #### 前言 在Python编程中,经常需要处理字符串与各种数据类型(如列表、元组、字典)之间的转换。为了实现这种转换,Python提供了`eval()`函数。然而,`eval()...
在Python编程中,动态调用函数是一种灵活的特性,允许程序在运行时决定要执行哪个函数。这通常用于处理不确定的函数名、参数或需要根据条件执行不同操作的情况。以下是对动态调用函数实例的详细解析: 1. **根据...
函数声明具有函数名,而函数表达式可以没有函数名或者使用命名函数表达式(NFE)。 ```javascript // 函数声明 function add(a, b) { // ... } // 匿名函数表达式 var add = function(a, b) { // ... }; // ...