关于动态执行代码(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 相关文章推荐
用js实现小球的自由移动代码
Apr 22 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 Javascript
jQuery定义插件的方法
Dec 18 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
详解js中let与var声明变量的区别
Apr 05 Javascript
JS随机密码生成算法
Sep 23 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 Javascript
用webAPI实现图片放大镜效果
Nov 23 Javascript
Vue实现简单购物车功能
Dec 13 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动态读取数据清除最右边距的方法
2017/04/12 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
Python闭包实现计数器的方法
2015/05/05 Python
Python基于DES算法加密解密实例
2015/06/03 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python绘制地震散点图
2019/06/18 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
车贷收入证明范本
2014/01/09 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
求职信结尾怎么写
2014/05/26 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
结婚幸福感言
2015/08/01 职场文书
环保建议书范文
2015/09/14 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
Java 关于String字符串原理上的问题
2022/04/07 Java/Android