您的位置:首页 > 娱乐 > 明星 > 产品宣传图册_互联网营销外包公司_今日预测足球比分预测_全案网络推广公司

产品宣传图册_互联网营销外包公司_今日预测足球比分预测_全案网络推广公司

2024/12/23 12:59:16 来源:https://blog.csdn.net/qq_33256701/article/details/143571088  浏览:    关键词:产品宣传图册_互联网营销外包公司_今日预测足球比分预测_全案网络推广公司
产品宣传图册_互联网营销外包公司_今日预测足球比分预测_全案网络推广公司

浏览器环境下,eval 是 JavaScript 中的一个函数,它可以将一个字符串作为 JavaScript 代码进行执行。

例如:

const j = 2;
const p = 5;const sum = 'j+p';const result = eval(sum) // ouput: 7

但是在微信小程序中并不支持eval函数。

解决方案:

  1. 安装第三方包
    npm i expr-eval
  2. 创建calculatorEval.js文件,自定义类似的eval函数,因为eval原生函数比较强大,这里只根据自己的需求实现一些简单的运算
    const Parser = require("expr-eval").Parser;
    const parser = new Parser();
    // Add a new function
    // parser.functions.parseFloatFunction = function (arg1, arg2) {
    //   return parseFloat(arg1).toFixed(arg2);
    // };
    /*** 小程序中不支持eval的代替方案* @param {*} express 字符串表达式* @param {*} assignments 需要作为变量的对象值,格式为{j}* @returns*/
    function calculatorEval(express, assignments) {let expr = express;if (express.includes("parseFloat")) {// 这里对parseFloat 特殊处理, 请参考https://github.com/silentmatt/expr-eval?tab=readme-ov-file#parserevaluateexpression-string-variables-object// 不支持的表达式转换需要再次处理if (express.includes("toFixed")) {expr = express.replace(new RegExp(/(parseFloat)(.*)(.toFixed)(.*)/g), "$2");} else {expr = express.replace(new RegExp(/(parseFloat)(.*)/g), "$2");}let arg2 = express.replace(new RegExp(/(.*)(.toFixed\()(.*)(\))/g), "$3");const arg1 = Parser.evaluate(expr, assignments);if (arg2 === "") {arg2 = 1;}const res = parseFloat(arg1).toFixed(arg2);return res;}const res = Parser.evaluate(expr, assignments);return res;
    }export default calculatorEval;
    
  3. 导入calculatorEval方法实现同等需求
    const j = 2;
    const p = 5;const sum = 'j+p';const result = calculatorEval(sum, { j, p }) // ouput: 7
    

    可以点击GitHub - silentmatt/expr-eval: Mathematicression evaluator in JavaScript查看expr-eval库具体支持的运算方法。

  4. 当然,如果使用不受信任的输入,它可能会带来安全风险,因为它可以执行任意代码。可以使用使用白名单,输入验证或其他替代方法来规避。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com