Перенос переменных из javascript в math.js (getElementById ()) - PullRequest
2 голосов
/ 24 сентября 2019

Я пытаюсь передать переменную 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

Я получаю следующую ошибку:

Uncaught Error: неопределенный символ denexp

У вас есть идеи?

1 Ответ

2 голосов
/ 24 сентября 2019

В строке ("G = denexp"), которую вы передаете evaluate, Math.js ожидает найти только такие вещи, как числа, единицы и математические символы: 0.5, sin, sqrt, degи т. д. Вы пытаетесь передать переменную 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 = здесь) также будет сохранено в области видимости (хотя простое присвоение одной переменной другой, как это сделано в вашем примере, не очень полезно и, вероятно, не соответствует цели).

...