javascript - 如何在javascript中将代码作为字符串评估为类名?
问题描述
我正在尝试反序列化包含类名的 URL 参数,然后针对该类测试现有对象。
eval
我以为我可以用这样的方式检索实际的课程
let type = eval(this.route.snapshot.queryParams['type']);
let id = +this.route.snapshot.queryParams['type'];
this.selectedResult = this.data.find(x => x.constructor === type && x.id === id);
但是eval
抛出:
未捕获的 ReferenceError:未定义 MyClass
确实,当我在线下放置断点时eval
,我的业务类没有定义。
我的猜测是导入并没有真正导入类,因为它仅用于在编译之前检查类型。
我能怎么做?
解决方案
您可以只检查构造函数名称:
x.constructor.name === this.route.snapshot.queryParams['type']
作为奖励,这对您的用户来说会减少安全风险(您的用户的浏览器不会评估可能已经在例如邮件中的链接中给出的随机字符串)。
在 URL 中传递未经过滤的代码引用仍然不是一个好主意:如果实际的类名发生变化怎么办?
推荐阅读
- php - PHP 邮件在邮件中显示密件抄送地址
- arduino-uno - Arduino mills() 溢出
- java - 字符串如何相互比较?
- linux - sudoers:不能运行 2 个命令列表,其中第二个具有 glob * 并拒绝第一个
- node.js - 您如何在预中间件中实现 mongo 聚合管道?
- c# - Google 文字转语音延迟
- android - 从内部侦听器中删除 Firestore 快照侦听器
- excel - 如何在不定义行号的情况下生成 SUM(A+B)?
- android - Android MVVM:从广播接收器观察数据库变化
- nunit - 针对多个选项的集合不区分大小写比较