关于动态执行代码(js的Eval)

2016-02-19 14:41 7 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是关于动态执行代码(js的Eval),一起来学习了解下吧!

【 tulaoshi.com - Web开发 】

熟悉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:WINDOWSMicrosoft.NETFrameworkv1.1.4322Microsoft.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%system32msscript.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%system32msscript.ocx

        /// 该函数用来动态执行代码

        /// /summary

        /// param name="Expression"/param

        /// returns/returns

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

        public static string Eval(string Expression)

        {

            string strResult = null;

            try

            {

                MSScriptControl.ScriptControlClass jscript = new MSScriptControl.ScriptControlClass();

                jscript.Language = "JScript";               

                strResult = jscript.Eval(Expression).ToString();

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

            }

            catch (Exception ex)

            {

                Debug.Fail(ex.Message);              

            }

            return strResult;

        }

    }

}
 

来源:http://www.tulaoshi.com/n/20160219/1607604.html

延伸阅读
本来想上周末没能用DELPHI实现动态代理就算了,可是这几天却始终放不下这个想法,这实在是一个太美妙的想法了。而且在认真看了VCL对SOAP的实现后,现在至少有九成的把握可以实现这样一个动态代理。 那么动态代理有什么用? 这要先从GoF的Proxy模式说起。 假设有下面这样一个接口及其实现: 现在,如果你是这个接口的用户...
标签: Web开发
代码如下: function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i"); var r = window.location.search.substr(1).match(reg); if (r!=null) return unescape(r[2]); return null; } alert(GetQueryString("id"));
标签: Web开发
1、用JS调用Htm,主页面怎么写? 在body与/body之间合适位置写下这个代码: script language="JavaScript" src="head.js"  type="text/JavaScript"/script src="js文件名称和路径" 2、js文件怎么写? 比如:head.js内容这样写,把主页面里的htm需要转换成JS的代码,用JS语句“document.write”或“document.writeln”...
标签: Web开发
html文件代码如下: !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" html head meta http-equiv="Content-Type" content="text/html; charset=utf-8" titleJS控制非法字符的输入/title /head body form p这里不允许输入如下字符:(像!@#$%^&am...
标签: Web开发
代码如下: //** Powered by Fason //** Email: fason_pfx@hotmail.com var icon={     root    :'image/root.gif',     open    :'image/open.png',     close    :'image/cl...

经验教程

244

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部