我试图反序列化包含类名的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
行上放置一个断点时,我的业务类别未定义。
我的猜测是,导入实际上并没有导入类,因为它仅用于在编译之前检查类型。
我该怎么办?
答案 0 :(得分:0)
您可以只检查构造函数名称:
x.constructor.name === this.route.snapshot.queryParams['type']
作为奖励,这将为您的用户减少安全风险(您的用户的浏览器并未逃避可能在例如邮件链接中给出的随机字符串)。
在URL中传递未过滤的代码引用听起来仍然不是一个好主意:如果实际的类名更改了怎么办?