Javascript 如何在java脚本中计算字符串数学表达式?
请推荐eval()的替代方案,因为它显然“不安全”。请解释一下原因。 我在我的计算器应用程序中使用了这段代码,它可以工作,但我想对它进行优化Javascript 如何在java脚本中计算字符串数学表达式?,javascript,html,css,ecmascript-6,vanilla-forums,Javascript,Html,Css,Ecmascript 6,Vanilla Forums,请推荐eval()的替代方案,因为它显然“不安全”。请解释一下原因。 我在我的计算器应用程序中使用了这段代码,它可以工作,但我想对它进行优化 if (e.target.innerHTML === "=" ){ newArr=arr.join(' '); var result =eval(newArr); pnode.innerHTML = result; } else { pnode.innerHTML = e.target.
if (e.target.innerHTML === "=" ){
newArr=arr.join(' ');
var result =eval(newArr);
pnode.innerHTML = result;
}
else
{
pnode.innerHTML = e.target.innerHTML;
arr.push(e.target.innerHTML);
console.log(arr);
}
我们可以使用对象,而不是使用
eval()
方法。在属性中将数据存储为值
,其中键
是对象的标识符
例如:
let obj = {a: 9, b: 10};
console.log(obj.a + obj.b);
或,
如果需要替换eval()
,请参阅下面使用字符串的代码段,该字符串用于计算9
和10
之和:
console.log(Function('return ' + '9 + 10')()) // 19
我可以帮忙
const fun=新函数('a','b','returna+b'))
log(fun(1,2))//output:3执行此操作的最“正确”的方法(不会受到类似的影响,而(1){}
)使用表达式计算器库(如eval
)通常被认为是不安全的,因为它将以调用方的完全权限在客户端设备上运行作为输入的任何代码,而不管该代码是否恶意
如果运行的字符串eval
可能受到恶意第三方的影响,则这是危险的,因为它将拥有用户授予该网页的所有权限
例如,邪恶用户X可能编写了一个脚本,您的应用程序将该脚本无辜地提供给用户Y的浏览器,在该浏览器中使用eval
运行。但是,在您的情况下,由于您没有将数据从一个用户提供给另一个用户,因此字符串不可能受到第三方的影响,使用eval
也很好。看见然而,与可选的功能相比,eval的效率相对较低。功能虽然仍然不安全,但更安全,但我们已经确定这种类型的漏洞不适用于您的用例。更重要的是,(至少根据MDN文档),功能更高效。只需执行:var result=Function(“return”+newArr)()
您的客户机仍然可以在(true){console.log(“infinite loop”)}
时编写类似于的愚蠢的东西,但是他们可以通过控制台完成这项工作,并且不会影响其他人。总之,eval
和类似的函数常常被盲目地谴责为“不安全”,但这仅在某些情况下是正确的