myEval

export const evalExp = /[!\&\|\+\-\*\%=\/<\>\^\(\)\~\:\?\;]/g;
export function myEval(originString: string, context: any) {
if (!context) return;
let bindKey = originString;
bindKey = bindKey.replace(evalExp, " ");
let bindKeys = bindKey
.split(" ")
.map(s => s.trim())
.filter(e => !!e)
.filter(e => {
if (/^['"`]/.test(e)) {
return false;
} // 过滤布尔值
if (e === "true" || e === "false") {
return false;
} // 过滤number
if (!isNaN(+e)) {
return false;
}
return true;
});
let args = bindKeys.map(s => {
if (/\./.test(s) && /\[|\]/g.test(s)) {
let aindex = s.indexOf(".");
let bindex = s.indexOf("[");
let index = Math.min(aindex, bindex);
let obj = s.substr(0, index);
return obj;
} else if (/\./.test(s)) {
let aindex = s.indexOf(".");
let obj = s.substr(0, aindex);
return obj;
} else if (/\[|\]/g.test(s)) {
let bindex = s.indexOf("[");
let obj = s.substr(0, bindex);
return obj;
}
return s;
});
args = toArray(new Set(args));
const newArgs: string[] = [];
let datas = args.map((k) => {
if (k in context) {
newArgs.push(k)
return context[k]
}
}).filter(e => !!e); if (!datas.length) return;
let funbody = `return function(${newArgs.toString()}) {
'use strict';
${originString};
}`;
return Function(funbody)()(...datas);
}

evalFun

export function evalFun(bindKey: string, data: any) {
if (undefinedp(data)) return;
try {
const r = Function(`with(this){ return ${bindKey} }`).apply(data, arguments)
return r === '' ? undefined : r;
} catch (error) { }
}

setData

export function setData(key: string, newValue: any, contextData: ContextData) {
if (!stringp(key)) return null;
return Function(`return function(d) {
with(this){
${key} = d;
}
}`)().call(contextData.store, newValue);
}

最新文章

  1. C++基础_总结
  2. 我的SpringMVC配置
  3. Photoshop的评价
  4. 在CentOS6.5上安装MariaDB
  5. excel、csv、txt文件数据读取
  6. 一个NULL引发的血案
  7. Chorme dev tools小技巧
  8. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板
  9. .NET ORM框架(一)
  10. Android+OpenCV 摄像头实时识别模板图像并跟踪
  11. iOS开发——真机调试证书—发布证书
  12. 关于一次Weblogic活动线程的问题处理
  13. FMDB 的基本操作
  14. git 查看当前与上一次version的差异
  15. 一张图解析nvm,npm,nodejs之间的关系
  16. SDN/NFV趋势思考点滴
  17. ZOJ 3604 Tunnel Network(凯莱定理)
  18. LeetCode算法题-Range Addition II(Java实现)
  19. Java系统高并发之Redis后端缓存优化
  20. php中inset 和 和 empty 的区别

热门文章

  1. cpdd 坐标:SD
  2. LOJ2436
  3. codevs3639
  4. tcpdump抓包及tshark解包方法介绍
  5. linux系统资源限制———ulimit命令
  6. 关闭Linux - centos7的防火墙
  7. WPS Excel启用正则表达式
  8. OsgEarth开发笔记(三):Osg3.6.3+OsgEarth3.1+vs2019x64开发环境搭建(下)
  9. HDU 1754线段树
  10. 【poj 2407】Relatives(数论--欧拉函数 模版题)