我正在尝试将javascript变量传输到math.js函数。变量(denexp)由getElementById获得,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="https://unpkg.com/mathjs@6.2.2/dist/math.min.js"></script>
<style>
body {
font-family: sans-serif;
}
</style>
</head>
<body>
<canvas id=canvas1 width=1600 height=400></canvas>
<canvas id=canvas2 width=800 height=400></canvas>
<table>
<tr>
<th>den</th>
<th><input type="number" id="denid" value="1.0" min="0"> </th>
</tr>
</table>
<script>
const sim = math.parser()
const denexp = document.getElementById("denid").value;
sim.evaluate("G = denexp") // Density
</script>
</body>
</html>然而,math.js似乎不能读denexp。
我得到以下错误:
未明错误:未定义符号denexp
你有什么想法吗?
发布于 2019-09-24 12:39:46
在传递给"G = denexp"的字符串( evaluate )中,Math.js只希望找到数字、单位和数学符号之类的东西:0.5、sin、sqrt、deg等。您试图通过简单地将变量denexp包含在字符串中来传递变量denexp,但是"denexp"并不是Math.js理解的符号。相反,您必须将denexp的值追加到字符串中:
sim.evaluate("G = " + denexp)或者,如果您的浏览器目标支持模板文字:
sim.evaluate(`G = ${denexp}`)或者,您可以为Math.js提供一个作用域,允许您使用表达式中在作用域中定义的任何变量:
var scope = {
denexp: denexp
}
sim.evaluate("G = denexp", scope)这样做的好处是,任何变量赋值(如此处的G = )也将保存到作用域中(尽管简单地将一个变量分配给另一个变量(就像在您的示例中所做的那样)并不非常有用,而且可能不是您的目标)。
https://stackoverflow.com/questions/58080175
复制相似问题