math-evaluate
v0.1.0
Published
Lightweight math expression evaluator without eval or third-party dependencies.
Maintainers
Readme
math-evaluate
轻量级数学表达式求值库,适用于 JavaScript 与 TypeScript。实现上不使用 eval 或 new Function,也没有第三方运行时依赖。
特性
- 支持四则运算与取余、幂运算(
+、-、*、/、%、^),比较运算(>、>=、<、<=、==、!=),逻辑运算(&&、||、!) - 内置常量:
e、pi、true、false - 内置函数:
abs、acos、asin、atan、ceil、cos、exp、floor、ln、log、max、min、pow、round、sin、sqrt、tan - 可通过第二个参数传入自定义变量(作用域对象)
- 出错时抛出
MathEvaluateError,信息中包含出错位置
安装方式
npm install math-evaluateyarn add math-evaluatepnpm add math-evaluate使用方式
ESM(import 导入)
import {
evaluateMathExpression,
evaluate,
MathEvaluateError,
} from 'math-evaluate'
console.log(evaluateMathExpression('2 + 3 * 4')) // 14
console.log(evaluate('x ^ 2', { x: 3 })) // 9
try {
evaluate('不存在的变量')
} catch (e) {
if (e instanceof MathEvaluateError) {
console.error(e.message)
}
}CommonJS(require 导入)
const {
evaluateMathExpression,
evaluate,
MathEvaluateError,
} = require('math-evaluate')
console.log(evaluateMathExpression('sin(pi / 2)')) // 1浏览器(<script> 标签,全局变量)
先在仓库根目录执行 npm run build 生成 dist/index.global.js。在 HTML 里用相对路径指向该文件即可(请按页面文件与 dist 的实际位置调整,例如页面位于 demo/browser/index.html 时可写 ../../dist/index.global.js):
<script src="../../dist/index.global.js"></script>
<script>
// 全局对象名:MathEvaluate
console.log(MathEvaluate.evaluateMathExpression('1 + 2')) // 3
console.log(MathEvaluate.evaluate('a > b', { a: 2, b: 1 })) // true
</script>API 说明
| 导出项 | 说明 |
|--------|------|
| evaluateMathExpression(expression, scope?) | 计算表达式 expression;可选参数 scope 为变量名到 number 或 boolean 的映射。 |
| evaluate | 与 evaluateMathExpression 等价,命名上接近常见 evaluate 习惯。 |
| MathEvaluateError | 语法错误、未知变量或函数、非有限数值结果等情况下抛出。 |
| MathEvaluateValue | 类型:number \| boolean |
| MathEvaluateScope | 类型:Record<string, MathEvaluateValue> |
