`

eval()方法有了点感觉

阅读更多

Evaluates a string and executes it as if it was script code

 

"动态解析!"

 

找了下面两个例子,对eval()方法有了些感觉.感觉这个东东像是那种病毒,它自己可以自我复制,又像是又一套执行环境,它里面可以执行String类型的句子,

<html>
<body>

<script type="text/javascript">

    try{
        alert("Result: "+eval(prompt("Enter an expression: "," ")) );
    }catch(exception){
        alert(exception);
    }

</script>

</body>
</html>

在这个网页面里实验"http://www.w3schools.com/DHTML/tryit.asp?filename=trydhtml_randombanner"
<html>
<body>

        <script type="text/javascript">
            image0="/banners/w3schools.gif";
            href0="/default.asp";
            alt0="W3Schools.com";

            image1="/banners/rd_htmlref.jpg";
            href1="http://www.w3schools.com/html/html_reference.asp";
            alt1="HTML Reference";

            image2="/banners/rd_xhtml.jpg";
            href2="http://www.w3schools.com/xhtml/default.asp";
            alt2="ASP Free";

            len=3;

            now=new Date();
            now=now.getSeconds();
            rnd=now%len;

            image=eval("image"+rnd);
            href=eval("href"+rnd);
            alt=eval("alt"+rnd);

            document.write("I am Here:" + image + "<hr> " + rnd + "<hr> " );

            document.write("<a href='" + href + "'>");
            document.write("<img src='" + image + "' alt='" + alt + "'></a>");    
        </script>

    <h3>Refresh this page to see the banner change</h3>

</body>
</html>


image=eval("image"+rnd);
href=eval("href"+rnd);
alt=eval("alt"+rnd);
改为:
image="image"+rnd;
href="href"+rnd;
alt="alt"+rnd;

后,出事了,

现象如下:
这是改后的显示:"I am Here: image2",改前的显示为"I am Here: /banners/w3schools.gif".

自己拼的字符串仅仅是一个干巴巴的字符串,而用eval()后的字符串就有了指针的灵性!!!

 

 

现在感觉这个eval()就像Java里的源代码调用自己的.class一样,eval()自己可以自我编译.

可这个与JSON又有什么关系呢?还是感觉不出什么必然的联系.

1
4
分享到:
评论
4 楼 hax 2008-03-26  
你对eval的认识有误。大多数时候都不应该使用eval。文中的例子是如此,jquery的例子也是如此。没有必要迷信jquery。
3 楼 rmn190 2008-03-25  
看jQuery.js的源码发现有如下的应用:
  if ( typeof fn == "string" )
fn = eval("false||function(a,i){return " + fn + ";}");
2 楼 rmn190 2008-03-25  
在这个网页里发现了下面的一条:
eval("document.onmousedown = OnMouseDownHandler;");

比Java的反射灵活多了!
1 楼 rmn190 2008-03-25  
The eval() function in javascript is a way to run arbitrary code at run-time. In almost all cases, eval should never be used. If it exists in your page, there is almost always a more correct way to accomplish what you are doing. For example, eval is often used by programmers who do not know about using Square Bracket Notation.

http://www.javascripttoolbox.com/bestpractices/#squarebracket

相关推荐

    repeat莹光棒及异步调用aspx中的方法.txt

    接下来将详细解析这些知识点。 ### ASP.NET Repeater 控件 #### 1. Repeater控件简介 Repeater控件是一种非常灵活的数据绑定控件,它能将数据源中的数据格式化为任意HTML标记结构。与DataList或GridView等其他数据...

    svta-eval:评估项目

    自定义组件的最简单方法是使用JSS,其编写方式与scss类似。 增加耀斑可能意味着很多不同的事情。尤其是在涉及到开发人员的地方,我感觉其中包括添加了许多表情符号。 :party_popper: :party_popper: :party_popper: ...

    python改变日志(logging)存放位置的示例

    感觉还有更好的方法,是直接利用logging.config.fileConfig(log_config_file)方式读进来之后,通过修改handler方式来进行修改。 复制代码 代码如下:“””project trace system“””import sysimport ConfigParser...

    JavaScript数组问题解决的多种方法

    自己想了个办法,但是用到了很多eval还有循环,感觉不是很好: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 这个是数组的实现方法 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 高手支招 如果我完成类似...

    添加后台list给前台select标签赋值简单实现

    因此,推荐使用JSON.parse()来替代eval()方法,或者在服务器端做好数据的清洗和验证,确保返回的数据是安全的。 12. **代码组织和管理**: 为了便于维护和管理,开发者通常会将JavaScript代码和后端Java代码进行分离...

    java开发抽奖系统源码-scala-for-perl5-programmers:Scala教程针对具有Perl5经验的开发人员

    感觉非常Perlish,它有匿名方法、不止一种做事方式、奇怪的运算符,甚至还有一个上下文变量! 你很快就会有宾至如归的感觉:) 现在,我不会尝试教你如何编程,也不会学习基本的编程知识。 相反,我将在 Perl 5 和 ...

    winform集成fckeditor编辑器

    8. **优化用户体验**:为了让用户感觉更像是在使用桌面应用,可以考虑添加自定义的“保存”、“撤销”、“重做”按钮,并通过调用相应的FCKeditor API实现这些功能。 集成FCKeditor到WinForm可能需要一些JavaScript...

    Java计算器

    - 等号按钮执行计算,可能需要使用 `eval()` 方法解析表达式,或者手动实现计算逻辑。 - 清零和退格按钮分别重置输入和删除最后一个字符。 5. **设计模式** - MVC(模型-视图-控制器)模式:模型负责数据计算,...

    独一无二的弹性图片展示特效

    标签“独一无二”强调了这种特效的独特性和创新性,意味着它可能采用了不同于传统图像展示方法的技术或设计理念,为用户带来耳目一新的感觉。接下来,我们将深入分析代码片段中所涉及的关键知识点,以便更好地理解这...

    HTML网页版计算器.ppt

    网页计算器的核心在于JavaScript的`getElementById`方法和`eval()`函数。`getElementById`用于获取用户点击的按钮对应的字符,这些字符被连接成字符串。当用户点击"="键时,`eval()`函数将字符串转化为JavaScript...

    screeps:爬取模块

    目前screeps的开发,感觉所有的代码都是在每个tick的eval&#40;&#41;,每个tick之间的实例都没有存入内存。 使用原型的唯一优点是可以构建您的代码并提高这种可读性。收藏这是一个嵌入了许多方法来帮助操作实体的...

    亲密接触ASP.Net(part2)

    4. **数据绑定**:ASP.NET提供了多种数据绑定机制,如`DataBinder.Eval`、`Bind`和`DataSource控件`。这些方法可以将数据源中的数据绑定到控件,简化了数据展示和操作。理解不同的数据绑定方式及其应用场景对于开发...

    Ruby GUI Toolkits

    块中的代码通过`instance_eval`执行,`title`方法属于新创建的实例。`pack`是一个几何管理器,接受一个哈希作为参数,类似于Java的FlowLayout,按照定义顺序放置控件。`mainloop`是事件处理器,负责处理事件。 Ruby...

    asp.net时间控件

    4. **样式和主题**:为了符合网站的整体设计,控件可能支持自定义CSS样式或预定义的Bootstrap主题,以改变其外观和感觉。 5. **验证**:ASP.NET验证控件如`RequiredFieldValidator`、`RangeValidator`可用于确保...

    JavaScript实现鼠标点击后层展开效果的方法

    以下将详细探讨使用JavaScript实现这一效果的方法。 首先,该效果的关键在于理解HTML、CSS和JavaScript三者如何协同工作。HTML用于构建页面结构,CSS用于页面的样式和布局,而JavaScript则负责实现动态效果和交互...

    Redis如何使用lua脚本实例教程

    所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了。。。 说来也巧,redis的大老板给了你解决这种问题的方法,那就是Lua脚本,而且redis的最新版本也支持Lua Script debug,这应该也是未来Redis的一 个...

    js与ASP.NET 中文乱码问题

    1. 客户端 -&gt; 服务端的问题 1.1. get 方式提交短数据效率比 post 方式高 原因:个人感觉 1.2.... 这种方法对非标码位置比较有规律(比如存放在不同的变量中)的情况比较合适。 在服务端获取后无须用 unescape

    PHP基础教程 是一个比较有价值的PHP新手教程!

    或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点: - 学习过程 我个人更喜欢PHP的非常简单的学习过程。与Java和Perl...

    asp.net伪静态配置备忘

    总之,感觉网站的URL上面有参数是一件很别扭的事情,一方面很容易被注入,另一方面,参数传递很容易泄露一些有用的信息。 而这篇文章主要针对的是网站URL显示的伪静态化,这样就抛弃了直接生成纯静态页的麻烦,而且...

    2009 达内Unix学习笔记

    感觉是同一文件,删除一个,对另一个没有影响;须两个都删除才算删除。 ln -s file1 file1.sln 创建软链接。可跨系统操作,冲破操作权限;也是快捷方式。 八、时间显示 date 显示时间,精确到秒 用法 date [-u]...

Global site tag (gtag.js) - Google Analytics