关于动态执行代码(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 相关文章推荐
jquery下json数组的操作实现代码
Aug 09 Javascript
jQuery版Tab标签切换
Mar 16 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
D3.js实现拓扑图的示例代码
Jun 30 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
Vue实现页面添加水印功能
Nov 09 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
React-Native中props具体使用详解
2017/09/04 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
django用户登录和注销的实现方法
2018/07/16 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
python文字转语音的实例代码分析
2019/11/12 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
会议邀请书范文
2014/02/02 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
党小组评议意见
2015/06/02 职场文书