广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >VueTypeScript使用eval函数遇到的问题
  • 733
分享到

VueTypeScript使用eval函数遇到的问题

VueTypeScripteval函数Vueeval函数 2023-01-28 06:01:54 733人浏览 安东尼
摘要

目录简单的代码实例问题解决方法问题的原理一劳永逸的方法正常情况下,项目里不会用eval函数,但是万一要调用一个全局的js库,就需要用eval做些骚操作,这个时候编译会提示:is st

正常情况下,项目里不会用eval函数,但是万一要调用一个全局的js库,就需要用eval做些骚操作,这个时候编译会提示:is strongly discouraged as it poses security risks and may cause issues with minification.

警告是可以忽略,刚开始我也没当回事,有风险就有风险,可控,我知道自己写的是啥。但是,今天我改代码的时候出了问题。就是dev时候正常,但是打包以后,不按照预期执行,编译出来的代码就不是我要的逻辑。

问题的关键是:使用eval的函数不能是全局函数(需要包装在一个对象里),然后这个函数内容要简单,不要里面定义各种变量,然后被eval调用,免得被编译时候优化

简单的代码实例问题

上一段简单的代码:

<template>
  <div>
    <button @click="btn">测试</button>
  </div>
</template>
<script setup lang="ts">
function myfun(param:number){
    let ret = 0
    eval("ret = param+1")
    return ret;
}
function btn() {
  let ret = myfun(1);
  console.log(ret);
}
</script>

dev运行在浏览器点击按钮,输出2,没毛病

然后打包以后,运行就会是这样,输出为NaN

缩成一坨的这个代码里面,把我的myfun函数编译成了这样,也没毛病:

function myfun(param){let ret=0;return eval("ret = param+1"),ret }

但是,调用时候变成了这样!!!!

myfun调用的时候,传入的参数哪里去了???

let e=myfun();console.log(e)

因为没有参数进入,eval里的param+1结果就变成了NaN

解决方法

把代码改成这样,函数包装到一个对象里面:

<template>
  <div>
    <button @click="btn">测试</button>
  </div>
</template>
<script setup lang="ts">
const FunPack = {
  myfun(param:number){
    let ret = 0
    eval("ret = param+1")
    return ret;
  }
}
function btn() {
  let ret = FunPack.myfun(1);
  console.log(ret);
}
</script>

然后打包运行,输出为2正常:

这个时候调用变成这样,myfun的时候传的参数正常

let e=FunPack.myfun(1);console.log(e)

问题的原理

感觉上,对于调用一个不在对象里的函数,typescript编译时候进行了更多优化,对于myfun函数,里面eval函数那一行没有类型系统,等于没有,所以编译时候理解成下面这样,等于没有eval那一行。等于param没有被使用,所以调用函数时候,觉得这个参数没有用,就给吃了。。。

function myfun(param:number){
    let ret = 0
    return ret;
}

同理,如果myfun里面定义了别的变量,用来给eval使用,但是别的地方没有使用,编译时候,这个变量就会被编译器认为无效,然后被吃掉,比如myfun定义成这样,打包运行就会报错dat is not defined

function myfun(param:number){
    let ret = 0
    let dat = param + 10;
    eval("ret = dat+1")
    return ret;
}

一劳永逸的方法

虽然通过把函数封装到对象,可以解决问题,但是,也说不好ts编译器后续会不会关于对象的方法调用也进行这种优化。

所以还有一个解决方法,就是在函数里把param用一下,让编译器觉得它被使用了,别吃掉。

比如改成这样,把param输出一下。。。

function myfun(param:number){
    let ret = 0
    console.debug(param);
    eval("ret = param+1")
    return ret;
}

到此这篇关于Vue TypeScript使用eval函数遇到的问题的文章就介绍到这了,更多相关Vue TypeScript使用eval函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: VueTypeScript使用eval函数遇到的问题

本文链接: https://www.lsjlt.com/news/178425.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • VueTypeScript使用eval函数遇到的问题
    目录简单的代码实例问题解决方法问题的原理一劳永逸的方法正常情况下,项目里不会用eval函数,但是万一要调用一个全局的js库,就需要用eval做些骚操作,这个时候编译会提示:is st...
    99+
    2023-01-28
    Vue TypeScript eval函数 Vue eval函数
  • 关于使用jpa聚合函数遇到的问题
    目录使用jpa聚合函数遇到的问题首先通过@PersistenceContext注入EntityManager使用如下jpa聚合函数(适用于联合查询)不罗嗦了,直接上代码循环一下那个获...
    99+
    2022-11-13
  • vue使用节流函数会遇到什么问题
    小编给大家分享一下vue使用节流函数会遇到什么问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!举一个 业务场景概念:关于防抖函数的介绍关于addEventLis...
    99+
    2023-06-15
  • Go函数返回nil遇到问题避坑分析
    目录前言问题1问题2前言 go语言写函数时经常返回nil,然后在函数外面判断返回值是否为空。这里有个bug,记录一下 问题1 (*Type)(nil) ≠ nil func ...
    99+
    2023-01-06
    Go 函数返回nil避坑 Go nil
  • 使用二进制xtrabackup遇到的问题
    下载好二进制包后,版本为2.4.12,准备使用命令,报错如下 cd xtrabackup ./innobackupex --version innobackupex: error while lo...
    99+
    2022-10-18
  • 使用@ApiModel遇到的问题及解决
    目录@ApiModel遇到的问题1. 习惯2. 遇坑3. 排查4. 解决@ApiModel和@ApiModelProperty版本@ApiModel@ApiModelProperty...
    99+
    2022-11-13
  • Android Hilt的使用以及遇到的问题
    目录简介 导入Hilt组件层次 组件默认绑定 简单使用 @HiltAndroidApp 介绍 使用 @AndroidEntryPoint 介绍 使用@Module 和 @Instal...
    99+
    2022-11-12
  • Python中eval()函数的使用
    今天给大家分享一下Python中的eval()函数,如果感觉博主的文章还不错的话,希望大家点赞支持一下博主 文章目录 eval()函数语法实例实例1实例2实例3 eval()函...
    99+
    2023-10-23
    python
  • cordova使用中遇到的问题有哪些
    这篇文章主要介绍了cordova使用中遇到的问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介Cordova提供了一组设备相关的A...
    99+
    2022-10-19
  • springmvc项目使用@Valid+BindingResult遇到的问题
    目录第一步:pom.xml中引入javax.validation和hibernate-validator第二步:创建需要校验的参数bean类这里一定要注意两个问题第三步:写contr...
    99+
    2022-11-12
  • vue使用mui遇到的问题怎么办
    小编给大家分享一下vue使用mui遇到的问题怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用mui遇到的坑记录主要用到webpack打包工具与mui,mi...
    99+
    2023-06-29
  • 使用@ApiModel遇到的问题如何解决
    这篇文章主要介绍了使用@ApiModel遇到的问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇使用@ApiModel遇到的问题如何解决文章都会有所收获,下面我们一起来看看吧。@ApiModel遇到的问...
    99+
    2023-07-02
  • MS SQL中遇到空字符串转化数值遇到的问题
    需要将名为AX一列varchar(30)的市值相加到数值型字段上,使用select cast(AX as decimal(12,2))出现错误“从数据类型 varchar 转换为 numeric ...
    99+
    2022-10-18
  • 关于@RequestParam的使用所遇到的404问题
    目录@RequestParam的使用所遇到的404问题困扰:问题所在及解决:下面是第一种方式:第二种方式:@RequestParam注解在使用过程一些注意在项目开发过程的一些教训经验...
    99+
    2022-11-12
  • 如何解决使用ProcessBuilder的遇到的问题
    这篇文章主要介绍如何解决使用ProcessBuilder的遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用ProcessBuilder踩到的坑最近使用ProcessBuilder执行命令,命令内容正确,但...
    99+
    2023-06-15
  • 你是否在ASP和Apache中遇到了大数据函数的问题?
    随着数据量的不断增大,处理大数据的需求也越来越强烈。然而,在使用ASP和Apache时,可能会遇到一些大数据函数的问题。本文将介绍常见的大数据函数以及如何解决这些问题。 一、常见的大数据函数 Sum函数 Sum函数用于计算指定字段的总和...
    99+
    2023-07-22
    apache 大数据 函数
  • Golang处理浮点数遇到的精度问题(使用decimal)
    目录一、浮点数是什么?1.指数方案2.规范化指数形式3.IEEE754标准二、出现精度问题的情况1.浮点数加减运算2.float64与float32之间转换3.int64和float...
    99+
    2022-11-13
  • vuex中使用modules时遇到的坑及问题
    目录vuex使用modules时遇到的坑vuex中modules基本用法1. store文件结构3. app.js文件内容5. 配置main.jsvuex使用modules时遇到的坑...
    99+
    2022-11-13
  • Spring Security中使用authorizeRequests遇到的问题小结
    目录SpringSecurity 框架简介 一、运行项目报错 二、错误修正SpringSecurity 框架简介 Spring 是非常流行和成功的 Java 应用开发框架,Sprin...
    99+
    2023-02-03
    Spring Security使用authorizeRequests Spring Security遇到问题
  • vue3中使用swiper及遇到的问题解析
    目录一、安装swiper二、使用swiper三、echarts+swiper一、安装swiper 使用npm install swiper安装swpier插件 npm install...
    99+
    2023-05-15
    vue3使用swiper vue3 swiper
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作