gpt4 book ai didi

javascript - 如何使用 eval 并在对象中搜索值?

转载 作者:行者123 更新时间:2023-11-30 17:41:34 25 4
gpt4 key购买 nike

我目前正在研究一个“简单”的税收计算器,它从数据库和当前托管的网页中获取一些信息。例如,您位于包含有关您家的详细信息的属性页面上。它会找到特定的信息:税区、属性(property)类型和当前值(value)等等。最重要的是,数据库有一些变化的信息,这些信息通过管理界面输入以开发税收公式。

我正在尝试使用 eval 来处理通过 jsonp 从数据库返回的公式。我遇到的问题是如何让 eval 函数识别出公式所包含的变量在“计算器”对象中。

示例 json 结果:

var calculator = {
"Name": "Residential",
"Formula": "(((rrb * (base + iv) - (hcv * homestead)) - (mcv * military)) * (levy / 1000))",
"Levy": 1000.00000,
"Variables": [
{
"Type": "System",
"DisplayName": "Tax District",
"ShortName": "levy",
"Value": 0.000000
},
{
"Type": "Form Variable",
"DisplayName": "Current Property Value",
"ShortName": "currentValue",
"Value": 0.000000
},
{
"Type": "Form Variable",
"DisplayName": "Number of Homestead Credits",
"ShortName": "homestead",
"Value": 0.000000
},
{
"Type": "Form Variable",
"DisplayName": "Number of Military Credits",
"ShortName": "military",
"Value": 0.000000
},
{
"Type": "Rollback",
"DisplayName": "Residential Rollback",
"ShortName": "rrb",
"Value": 0.528200
},
{
"Type": "User Input",
"DisplayName": "Total Value Add of Improvements",
"ShortName": "iv",
"Value": 0.000000
},
{
"Type": "Credit",
"DisplayName": "Homestead Credit Value",
"ShortName": "hcv",
"Value": 4850.000000
},
{
"Type": "Credit",
"DisplayName": "Military Credit Value",
"ShortName": "mcv",
"Value": 1852.000000
}
]
}

对于上述对象,与 eval 一起使用的公式只会查看全局命名空间,但我真的不想那样公开变量。

要让它与 eval 完美配合,最简单的方法是什么?理想情况下,我可以有一些函数将对象传递给它,这将使值很容易用于 eval 函数。

最佳答案

好的,首先:不要这样做eval 用户给你的任何东西几乎都是不安全的,因为它会让你面临各种讨厌的攻击媒介。

说真的。 不要这样做。编写一个将为您执行此操作的解析器。这会很痛苦,但我保证一旦安全漏洞变得明显,您最终还是会这样做。

但是,如果您仍然执意要这样做:

eval 不能被告知使用 eval.calleval.apply 使用新的上下文。您必须通过定义一个在特定对象上下文中调用的函数来自行处理范围。

拿这段代码:

var o = {
s: 'catpants',
t: 'doggyhat',
f: function(statement) {
return eval(statement);
}
}

通过调用 o.f("this.s + ' ' + this.t");,您将获得 catpants doggyhat

对于您的情况,您必须定义一个对象来解析用户可能在表达式中使用的所有变量,然后在该对象上定义一个eval用户语句的函数。

关于javascript - 如何使用 eval 并在对象中搜索值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com