关于动态执行代码(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 相关文章推荐
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
May 30 Javascript
Div自动滚动到末尾的代码
Oct 26 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
Apr 07 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
调整小数的格式保留小数点后两位
May 14 Javascript
介绍JavaScript的一个微型模版
Jun 24 Javascript
AngularJS进行性能调优的7个建议
Dec 28 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
简单实现jQuery上传图片显示预览功能
Jun 29 jQuery
vue移动端监听滚动条高度的实现方法
Sep 03 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
使javascript也能包含文件
2006/10/26 Javascript
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
python在命令行下使用google翻译(带语音)
2014/01/16 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
pymongo中group by的操作方法教程
2019/03/22 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python爬取网页信息的示例
2020/09/24 Python
Python 实现集合Set的示例
2020/12/21 Python
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
《李广射虎》教学反思
2014/04/27 职场文书
党性心得体会
2014/09/03 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
2014年度工作总结报告
2014/12/15 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
python基础之文件操作
2021/10/24 Python