关于动态执行代码(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内核之基本概念
Oct 21 Javascript
jquery移除、绑定、触发元素事件使用示例详解
Apr 10 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
jQuery移动web开发中的页面初始化与加载事件
Dec 03 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
js DOM的事件常见操作实例详解
Dec 16 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
PHP 强制下载文件代码
2010/10/24 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
基于jQuery的图片剪切插件
2011/08/03 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
python实现简单的计时器功能函数
2015/03/14 Python
详解python中requirements.txt的一切
2017/03/03 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Django如何自定义分页
2018/09/25 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
Python同步遍历多个列表的示例
2019/02/19 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python重要函数eval多种用法解析
2020/01/14 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
浅谈python 类方法/静态方法
2020/09/18 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
顺丰快递Java软件工程师面试题
2015/07/31 面试题
工作表现评语
2014/01/19 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
社区工作者演讲稿
2014/05/23 职场文书
中文专业自荐书
2014/06/29 职场文书
优秀小学生事迹材料
2014/12/26 职场文书