参考了这篇文章 js——new Function 一个可以随时动态执行字符串js代码的神器
因为一些原因,想要js代码块配置在数据库中返回,例如时间,我需要用到第三方库 moment。然后动态的得到startDate 和 endDate
配置在数据库中的startDate值是$moment().subtract(1,'year')
一年前的日期,而endDate值是$moment()
。
去掉$
符就是我想要的js代码
$
符号只是用于区分值和js代码。在js中我最终是replaceAll('$', '')
替换掉的。
实际逻辑如下:
import moment from 'moment';// 在使用的地方引入moment库
// startDate 和 endDate
var endDate = "moment()";
var startDate = "moment().subtract(1,'year')"
/**
将 moment 库传进去这样在执行startDate/endDate代码的时候就会将入参的moment拿到并执行想要的代码,
这里是通过return返回的,因此我用date1接收了返回值。
*/
var date1 = new Function('moment','return ' + startDate)(moment);
var date2 = new Function('moment','return ' + endDate )(moment);