javascript-eval SyntaxError:标识符在数值文本之后立即启动

javascript-eval SyntaxError:标识符在数值文本之后立即启动,javascript,syntax-error,eval,Javascript,Syntax Error,Eval,我试图使用JSXGraph在文本字段中显示用户输入的函数 这是我的代码: var board = JXG.JSXGraph.initBoard('box', {boundingbox: [-10, 10, 10, -10], axis:true}); eval("function f(x){ return "+field.value+";}"); board.create('functiongraph',[function(x){ retu

我试图使用JSXGraph在文本字段中显示用户输入的函数

这是我的代码:

            var board = JXG.JSXGraph.initBoard('box', {boundingbox: [-10, 10, 10, -10], axis:true});
        eval("function f(x){ return "+field.value+";}");
        board.create('functiongraph',[function(x){ return f(x); }]);
当用户输入诸如:2*x之类的内容时,此代码可以完美地工作 但是当用户输入:2x而没有*,它就不起作用了,我得到: SyntaxError:标识符紧跟在求值行上的数字文字之后

我做错了什么?

在您的示例中,您调用eval来创建一个新的JavaScript函数,该函数随后被绘制出来。当然,那么您必须提供正确的JavaScript

第一个简单的增强是用数字*字母替换所有数字字母的组合。例如,将2x替换为2*x,将1+2x替换为1+2*x。这可以使用以下正则表达式来完成

/**
 * Expand math expressions with suppressed multiplication dots.
 * Examples
 *      2x -> 2*x
 *      (2+3)(3+1) -> (2+3)*(3+1)
 * Attention with exponents:
 *      x^2x -> x^2*x
 */
expandShortMath = function(expr) {
    var re = /([\)0-9\.])\s*([\(a-zA-Z_])/g;
    return expr.replace(re, '$1*$2');
};
在您的示例中,您可以这样使用它:

eval("function f(x){ return " + expandShortMath(field.value) + ";}");
board.create('functiongraph',[function(x){ return f(x); }]);
但是,出于安全原因,最好避免调用eval。因此,JSXGraph为数学脚本语言提供了自己的解析器。只需提供board即可使用此解析器。使用包含函数项的字符串创建“functiongraph”。但JessieCode也需要乘法星。同样,这可以通过调用expandShortMath来解决

的表达式解析器可能在这里派上用场。您可以执行以下操作:

var f = math.eval('f(x) = 2x^3 - 5');
console.log(f(2)); // outputs 11

eval计算Javascript,2x不是有效的Javascript。你需要你自己的解析器,我怎么做?谢谢你的帮助,这并不复杂,但你得学点东西。从这里开始:
var f = math.eval('f(x) = 2x^3 - 5');
console.log(f(2)); // outputs 11