相关疑难解决方法(0)

为什么使用JavaScript eval函数是一个坏主意?

eval函数是一种动态生成代码的强大而简单的方法,那么有什么警告呢?

javascript security eval

522
推荐指数
14
解决办法
25万
查看次数

什么时候JavaScript的eval()不是邪恶的?

我正在编写一些JavaScript代码来解析用户输入的函数(用于类似电子表格的功能).解析了公式后,我可以将其转换为JavaScript并eval()在其上运行以产生结果.

但是,eval()如果我可以避免它,我总是回避使用,因为它是邪恶的(而且,无论是对还是错,我一直认为它在JavaScript中更加邪恶,因为要评估的代码可能会被用户改变).

那么,什么时候可以使用它?

javascript coding-style eval

253
推荐指数
9
解决办法
8万
查看次数

为什么eval邪恶呢?

我知道Lisp和Scheme程序员通常会说eval除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval.我在哪里可以找到使用中潜在问题的说明eval

例如,我知道GOTO程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval.

有趣的GOTO是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval不是代码使用continuation(据我所知 - 我可能是错的).

lisp scheme eval clojure common-lisp

141
推荐指数
8
解决办法
1万
查看次数

JSLint"eval是邪恶的." 备择方案

我有一些在客户端(浏览器)和服务器上运行的JavaScript函数(在Java Rhino上下文中).这些是小函数 - 基本上很少有验证器,它们定义良好且不依赖于全局或闭包 - 自包含和可移植.

这是一个例子:

function validPhoneFormat(fullObject, value, params, property) {
    var phonePattern = /^\+?([0-9\- \(\)])*$/;
    if (value && value.length && !phonePattern.test(value))
        return [ {"policyRequirement": "VALID_PHONE_FORMAT"}];
    else
        return [];
}
Run Code Online (Sandbox Code Playgroud)

为了保持DRY,我的服务器代码获取每个函数的句柄并调用它们上的toString(),将它们作为JSON对象的一部分返回给浏览器.像这样的东西:

      { "name" : "phoneNumber",
        "policies" : [ 
            { "policyFunction" : "\nfunction validPhoneFormat(fullObject, value, params, property) {\n    var phonePattern = /^\\+?([0-9\\- \\(\\)])*$/;\n    if (value && value.length && !phonePattern.test(value)) {\n        return [{\"policyRequirement\":\"VALID_PHONE_FORMAT\"}];\n    } else {\n        return [];\n    }\n}\n"
            }
          ]
      }
Run Code Online (Sandbox Code Playgroud)

然后我的浏览器JS代码接受此响应,并在该上下文中创建此函数的实例,如下所示:

eval("var policyFunction = " + this.policies[j].policyFunction);

policyFailures …
Run Code Online (Sandbox Code Playgroud)

javascript eval dry jslint

11
推荐指数
2
解决办法
8862
查看次数

jQuery if语句带有变量数学运算符

所以我正在寻找类似于这个问题python if语句的变量数学运算符,但在jQuery/Javascript中

基本上是这样的

var one = "4";

var two = "6";

var op = "==";

if (one op two) {
//do something
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

javascript jquery

2
推荐指数
1
解决办法
1830
查看次数

标签 统计

eval ×4

javascript ×4

clojure ×1

coding-style ×1

common-lisp ×1

dry ×1

jquery ×1

jslint ×1

lisp ×1

scheme ×1

security ×1