关于动态执行代码(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_08_函数对象
Oct 15 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
JS使用eval解析JSON的注意事项分析
Nov 14 Javascript
jquery.cookie.js用法实例详解
Dec 25 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
Jan 24 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
webpack打包多页面的方法
Nov 30 Javascript
微信小程序自定义导航栏
Dec 31 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php对数组排序代码分享
2014/02/24 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
layui实现数据分页功能
2019/07/27 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python自动化测试实例解析
2014/09/28 Python
python2 与python3的print区别小结
2018/01/16 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python图形用户接口实例详解
2019/12/16 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
python字符串下标与切片及使用方法
2020/02/13 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
教师竞聘上岗演讲稿
2014/09/03 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
党员转正介绍人意见
2015/06/03 职场文书