关于动态执行代码(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 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
JavaScript错误处理
Feb 03 Javascript
js实现简单计算器
Nov 22 Javascript
javascript计算对象长度的方法
Oct 25 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 Javascript
vue实现购物车案例
May 30 Javascript
微信小程序实现电子签名功能
Jul 29 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
ext form 表单提交数据的方法小结
2008/08/08 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
自己的js工具 Cookie 封装
2009/08/21 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
在Django框架中编写Context处理器的方法
2015/07/20 Python
SVM基本概念及Python实现代码
2017/12/27 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Python函数调用追踪实现代码
2020/11/27 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
项目负责人任命书
2014/06/04 职场文书
超市理货员岗位职责
2014/07/04 职场文书
道歉短信大全
2015/05/12 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Python使用Kubernetes API访问集群
2021/05/30 Python
Mysql 如何查询时间段交集
2021/06/08 MySQL
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android