微信小程序eval无法使用的替代方案

浏览器环境下,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. 当然,如果使用不受信任的输入,它可能会带来安全风险,因为它可以执行任意代码。可以使用使用白名单,输入验证或其他替代方法来规避。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计网】基于TCP协议的Echo Server程序实现与多版本测试

目录 前言: 1、InitServer类的实现 1.1. 创建流式套接字 1.2. bind 绑定一个固定的网络地址和端口号 1.3.listen监听机制 1.4.完整代码 2. 循环接收接口与服务接口 2.1.accept函数讲解 讲个商场拉客的故事方便我们理解: 2.2.服务接口实现 3.服…

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头

easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头 原版表头和表体字体美化自动拼接错误提示列自适应宽度自动合并单元格使用Easyexcel使用poi导出 在后台管理开发的工作中,离不开的就是导出excel了. 如果是简单的导出, 直接easyexce…

stm32cubeide 1.16.1 在ubuntu 24.04上的安装

从ST官网下载stm32cubeide 1.16.1后,在ubuntu 24.04上安装提示缺少三个依赖包: The following packages have unmet dependencies: st-stm32cubeide-1.16.1 : Depends: libncurses5 but it is not installable Depends: lib…

边缘计算的学习

文章目录 概要何为边缘计算?现阶段,企业使用边缘计算相对云计算 整体架构流程边缘网络组件边缘计算与云安全 研究方向结合引用 概要 edge 何为边缘计算? 边缘计算(英语:Edge computing),是一种…

SpringBoot在城镇保障性住房管理中的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理城镇保障性住房管理系统的相关信息成为必然…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇:算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…

Harmony鸿蒙高级证书考试

1、以下关于Taskpool和Worker的描述正确的是 ​ B、TaskPool支持任务延时执行 2、以下哪个装饰器用来表示并发共享对象。 ​ B、@Sendable 3、ArkTS支持以下哪些函数(不确定) ​ A、Object.keys(); 4、以下哪些赋值语句在ArkTS中是合法。 let value2: string | null = null…

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测

粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 粒子群优化双向深度学习!PSO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-BiTCN-BiGRU-Attention粒子…

「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建

本篇详细介绍在Mac系统上快速搭建Cangjie开发环境的步骤,涵盖VSCode的下载与安装、Cangjie插件的离线安装、工具链的配置及验证。通过这些步骤,确保开发环境配置完成,为Cangjie项目开发提供稳定的基础支持。 关键词 Cangjie开发环境搭建VSC…

协程6 --- HOOK

文章目录 HOOK 概述链接运行时动态链接 linux上的常见HOOK方式修改函数指针用户态动态库拦截getpidmalloc 第一版malloc 第二版malloc/free通过指针获取到空间大小malloc 第三版strncmp 内核态系统调用拦截堆栈式文件系统 协程的HOOK HOOK 概述 原理:修改符号指向 …

ResNet 残差网络 (乘法→加法的思想 - 残差连接是所有前沿模型的标配) + 代码实现 ——笔记2.16《动手学深度学习》

目录 前言 0. 乘法变加法的思想 1. 函数类 2. 残差块 (讲解代码) QA: 残差这个概念的体现? 3. ResNet模型 (代码讲解) 补充:更多版本的ResNet 4. 训练模型 5. 小结 6. ResNet的两大卖点 6.1 加深模型可以退化为浅层模型 6.2 用加法解决梯度消…

iphone怎么删除重复的照片的新策略

Phone用户常常面临存储空间不足的问题,其中一个主要原因是相册中的重复照片。这些重复项不仅占用了大量的存储空间,还会影响设备的整体性能。本文将向您展示iphone怎么删除重复的照片的方法,包括一些利用工具来自动化这个过程的创新方法。 识…

软件缺陷等级评定综述

1. 前言 正确评估软件缺陷等级,在项目的生命周期中有着重要的作用: 指导缺陷修复的优先级和资源分配 在软件开发和维护过程中,资源(包括人力、时间和资金)是有限的。通过明确缺陷的危险等级,可以帮助团队合…

【Pikachu】Cross-Site Scripting跨站脚本攻击实战

只管把目标定在高峰,人家要笑就让他去笑! 1.XSS(跨站脚本)概述 XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称…

【SpringBoot】 黑马大事件笔记-day2

目录 用户部分 实体类属性的参数校验 更新用户密码 文章部分 规定josn日期输出格式 分组校验 上期回顾:【SpringBoot】 黑马大事件笔记-day1 用户部分 实体类属性的参数校验 对应的接口文档: 基本信息 请求路径:/user/update 请求方式&#…

大数据面试题--kafka夺命连环问

1、kafka消息发送的流程? 在消息发送过程中涉及到两个线程:一个是 main 线程和一个 sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给双端队列,sender 线程不断从双端队列 RecordAccumulator 中拉取…

【系统架构设计师】2024年下半年真题论文: 论多源异构数据集成方法(包括参考素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2024年下半年 试题4)(回忆版)论文素材参考多源异构数据集成的重要性与挑战多源异构数据集成方法(1)数据仓库方法(2)中间件方法(3)联邦数据库方法多源异构数据集成方法应用案例分析多源异构数据集…

QT信号和槽与自定义的信号和槽

QT信号和槽与自定义的信号和槽 1.概述 这篇文章介绍下QT信号和槽的入门知识,通过一个案例介绍如何创建信号和槽,并调用他们。 2.信号和槽使用 下面通过点击按钮关闭窗口的案例介绍如何使用信号和槽。 创建按钮 在widget.cpp文件中创建按钮代码如下 …

【Golang】Go语言环境安装

Go语言环境安装 文章目录 Go语言环境安装一、Linux安装Go1.1、解压安装 Go语言支持以下系统 LinuxFreeBSDMac OS XWindows 安装包下载地址:https://go.dev/dl 如果打不开可以使用这个地址:https://golang.google.cn/dl/ 操作系统包名Windowsgo1.4.wi…

ESP32学习笔记——LOG日志库的使用

注:本文由CHATGPT辅助创作,未经验证,实际工程使用请仔细甄别。 对于设置日志级别的几种方式(esp_log_level_set、CONFIG_LOG_DEFAULT_LEVEL、CONFIG_LOG_MAXIMUM_LEVEL、LOG_LOCAL_LEVEL )容易混淆,特此学习…