我正在尝试将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
您有什么想法吗?
答案 0 :(得分:2)
在传递给"G = denexp"
的字符串(evaluate
中,Math.js希望仅查找数字,单位和数学符号之类的东西:0.5
,sin
,sqrt
,deg
等。您试图通过将变量denexp
简单地包含在字符串中来传递变量,但是"denexp"
不是Math.js理解的符号。相反,您必须将denexp
的 value 附加到字符串:
sim.evaluate("G = " + denexp)
或者如果您的浏览器目标支持模板文字:
sim.evaluate(`G = ${denexp}`)
或者,您可以为Math.js提供一个范围,该范围将允许您使用表达式中范围内定义的任何变量:
var scope = {
denexp: denexp
}
sim.evaluate("G = denexp", scope)
这样做的好处是,任何变量赋值(例如此处的G =
)也将保存到范围中(尽管像您的示例中那样简单地将一个变量赋给另一个变量,这不是很有用,而且可能不会您的目标是什么。