关于动态执行代码(js的Eval)实例详解


Posted in Javascript onAugust 15, 2016

熟悉javascript的朋友对Eval()函数可能都不会陌生,我们可以用它来实现动态代码的执行,我自己甚至写过一个网页专门用来计算算术表达式的,计算能力上比google、baidu的计算器还要好一些,至少精度要高,但是如果超出了四则运算的话,表达式的形式会复杂很,比如以百度给出的例子:

log((5+5)^2)-3+pi需要写成Math.log(Math.pow(5+5,2))*Math.LOG10E-3+Math.PI才能用Eval进行计算,对于这一点我还没有想到理想的解决方案。好了,这不是本文正题,我们姑且放过。

博客园里曾经见人用过下面的代码,至少从代码形式上挺简单的:

// csc.exe noname1.cs /r:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Microsoft.JScript.dll 
//注:需加入Microsoft.JScript与Microsoft.Vsa两个命名空间。
public class Class1
{
  static void Main(string[] args)
  {
    System.Console.WriteLine("Hello World");
    string Expression = "var result:int =0;result==1?\"成功\":\"失败\"";
    Microsoft.JScript.Vsa.VsaEngine ve = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
    Console.WriteLine(Microsoft.JScript.Eval.JScriptEvaluate(Expression, ve));
  }
}

不过,令人不爽的是,编译环境现在给出如下警告:'Microsoft.JScript.Vsa.VsaEngine' is obsolete: 'Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the ICodeCompiler documentation for additional help.'当然,代码可以编译通过,且执行是正常的。

下面我给出另外一种直接使用javascript的Eval函数的方法,借助于com组件,引用路径是 %SystemRoot%\system32\msscript.ocx ,我将完整的代码直接贴出来。

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace ScriptProgramming
{
  class Program
  {
    static void Main(string[] args)
    {
      string strExpression = "1+2*3";
      string strResult = Eval(strExpression);
      Console.WriteLine(strExpression + "=" + strResult);
 
      Console.WriteLine("Press any key to continue.");
      Console.ReadKey();
    }
    /// <summary>
    /// 引用com组件Microsoft Script Control
    /// %SystemRoot%\system32\msscript.ocx
    /// 该函数用来动态执行代码
    /// </summary>
    /// <param name="Expression"></param>
    /// <returns></returns>
    public static string Eval(string Expression)
    {
      string strResult = null;
      try
      {
        MSScriptControl.ScriptControlClass jscript = new MSScriptControl.ScriptControlClass();
        jscript.Language = "JScript";        
        strResult = jscript.Eval(Expression).ToString();
      }
      catch (Exception ex)
      {
        Debug.Fail(ex.Message);        
      }
      return strResult;
    }
  }
}

以上这篇关于动态执行代码(js的Eval)实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript窗口功能指南之在窗口中书写内容
Jul 21 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
JSON相关知识汇总
Jul 03 Javascript
javascript中arguments,callee,caller详解
Mar 16 Javascript
js实现按座位号抽奖
Apr 05 Javascript
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
Jun 07 Javascript
详解微信小程序开发之formId使用(模板消息)
Aug 27 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 Javascript
解决vue打包报错Unexpected token: punc的问题
Oct 24 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
Aug 15 #Javascript
对js eval()函数的一些见解
Aug 15 #Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
Aug 15 #Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 #Javascript
jQuery学习笔记之回调函数
Aug 15 #Javascript
纯css下拉菜单 无需js
Aug 15 #Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 #Javascript
You might like
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
Django Rest framework权限的详细用法
2019/07/25 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
Java中实现多态的机制
2015/08/09 面试题
优秀员工自荐书范文
2013/12/08 职场文书
初中校园广播稿
2014/02/02 职场文书
王老吉广告词
2014/03/20 职场文书
高中生家长寄语大全
2014/04/03 职场文书
团日活动总结
2014/04/28 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
酒店前台辞职书
2015/02/26 职场文书
2015学校年度工作总结
2015/05/11 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
Python 数据可视化之Seaborn详解
2021/11/02 Python