关于动态执行代码(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通过select动态更换图片的方法
Mar 23 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
Jan 12 Javascript
基于Javascript实现返回顶部按钮
Feb 29 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
js+css3制作时钟特效
Oct 16 Javascript
详细AngularJs4的图片剪裁组件的实例
Jul 12 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
Sep 06 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
js回调函数原理与用法案例分析
Mar 04 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
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
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
深入密码加salt原理的分析
2013/06/06 PHP
php经典算法集锦
2015/11/14 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
js单例模式详解实例
2013/11/21 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
python计算一个序列的平均值的方法
2015/07/11 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
Python如何操作docker redis过程解析
2020/08/10 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
编码实现字符串转整型的函数
2012/06/02 面试题
干部行政关系介绍信
2014/01/17 职场文书
《白鹅》教学反思
2014/04/13 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
大学学生个人总结
2015/02/15 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
2019年最新借条范本!
2019/07/08 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers