微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 不使用eval()绘制图形

我创建了一个Chrome扩展程序,可以绘制用户输入的数学公式的图形.为了轻松获得y的值,我使用了eval()(是的,我知道它很糟糕),因为它是实现它的最简单方法.

var equ = $("#equ1").val();                //some element

//let's say equ = "2(2^x) + 3x"

//some magic code
//equ becomes "2*(pow(2,x))+3*x"

for(var x = -10; x < 10; x++){
    var y = eval(equ.replace(/x/ig, x));   //calculate y value
    drawPoint(x, y);
}
console.log("Graphing done.");

但是,由于new manifest version 2,我不能再使用eval了.我想不出任何操纵字符串的方法.任何的想法?

解决方法:

干净的方式:您可以尝试使用Jison解析表达式并从输入字符串构建AST.然后,将函数与AST节点相关联,该节点将节点表示的操作应用于给予它们的数据.这意味着您必须在语法和节点代码中明确地放置您想要支持的每个数学表达式,但另一方面,这也可以更容易地支持JS不支持的数学运算符.如果你愿意投入一些时间,这可能就是你要走的路.

肮脏的方式:如果您的扩展程序在普通网站上使用,您可以通过注入< script>来进行某种间接评估.元素进入网站左右 – 然而,这可能是不安全的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐