eval 语法错误:标识符在数字文本之后立即开始
eval SyntaxError: identifier starts immediately after numeric literal
我正在尝试使用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(不带*)时,它不起作用,我得到:语法错误:标识符在 eval() 行上的数字文字之后立即开始
我做错了什么?
在你的例子中,你调用eval()
来创建一个新的JavaScript函数,随后绘制该函数。当然,你必须提供正确的JavaScript。
第一个简单的增强功能是用digit*letter
替换所有digit letter
组合。例如,将2x
替换为 2*x
,将(1+2)x
替换为 (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为数学脚本语言JessieCode提供了自己的解析器。只需向board.create('functiongraph')
提供包含函数术语的字符串即可使用此解析器。但JessieCode也需要乘法星。同样,这可以通过调用 expandShortMath()
来解决。
var board = JXG.JSXGraph.initBoard('box',
{boundingbox: [-10, 10, 10, -10], axis:true});
board.create('functiongraph',[expandShortMath(field.value)]);
数学的表达式解析器.js在这里可能会派上用场。您可以执行以下操作:
var f = math.eval('f(x) = 2x^3 - 5');
console.log(f(2)); // outputs 11
相关文章:
- PHP/Ajax/jquery/JON-在Ajax Post之后将echo文本中的一部分作为变量返回
- 如何使文本自动出现在HTML页面中的所有块引号之后
- 使文本在它之后再次可见'It’s被一个按钮隐藏了
- 将文本追加到之后特定行的文本区域
- CKEditor - 插入文本在 setData 之后不起作用
- 从字符串中删除-之后的一些文本
- 文本在jQuery中仅位于第一行之后的行的中心
- 匹配最后一个点之后的文本字符串
- Qualtrics:在矩阵表中的文本框之前/之后添加不同的字符
- 获取第二个文本区域之后的下一个所有输入
- 如何使用原型.js在文本块之后插入内容
- 单击语法错误:标识符在数字文本之后立即开始
- 正则表达式在文本中查找匹配项,而不是在单词之后
- eval 语法错误:标识符在数字文本之后立即开始
- Javascript在关键字之后剪切文本
- 在输入数组的 split() 和子字符串 () 之后的文本区域中显示
- 如何在文本的每 5,000 个字符之后的第一个
或
之后插入一个 - 语法错误:标识符在数字文本 asp.net 之后立即开始
- Node.js:在文本文件中的特定行之后插入一行
- 在移动web应用程序中初始化iScroll之后..文本框不可编辑