将变量从javascript传输到math.js(getElementById())

时间:2019-09-24 12:18:05

标签: javascript getelementbyid math.js

我正在尝试将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">&nbsp;</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

您有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在传递给"G = denexp"的字符串(evaluate中,Math.js希望仅查找数字,单位和数学符号之类的东西:0.5sinsqrtdeg等。您试图通过将变量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 =)也将保存到范围中(尽管像您的示例中那样简单地将一个变量赋给另一个变量,这不是很有用,而且可能不会您的目标是什么。