`

eval函数的工作原理(转)

阅读更多

eval函数的工作原理

eval函数会评估一个给定的含有JavaScript代码的字符串,并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。

举例说明

eval评估JavaScript表达式

var bar = 'bar';
var foobar = eval('"foo" + bar');
alert(foobar); 

//eval评估JavaScript语句 
var bar = 'bar';
// if variable bar equals 'bar', foobar is the result of 
// last executing statement: bar="foo-bar";

var foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert(foobar);

// change the valuebar = 'foo';
// now our the last executed statement is: bar = "bar-foo";
// therefore the value of variable foobar has been changed
// into 'bar-foo'

foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}');
alert(foobar);

 

 
JSON的格式

JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。

举例说明

对象的字面量 

var objectLiteral = {  name: "Objector.L",  age: "24",  special: "JavaScript",  sayName: function() {    return this.name;  }}; JSON对象 
var jsonFormat = {  
"summary": "Blogs",
  "blogrolls": [    {"title": "Explore JavaScript","link": "http://example.com/" }, {"title": "Explore JavaScript","link": "http://example.com/"}  ]};

 
 
eval和JSON

由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法。在转化的时候需要将JSON字符串的外面包装一层圆括号:

var jsonObject = eval("(" + jsonFormat + ")"); 为什么要加括号?

加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object] 

 

JSON格式的名字部分为什么要加引号?

因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。

举例说明

eval错误解析语义

alert(eval('{foo:"bar"}'));   // return "bar", incorrect eval正确解析JSON 
alert(eval('({"foo": "bar"})')); // return JSON object, correct 结论

 
理解eval的工作原理和json的严格的限定格式,合理结合eval和json应用于JavaScript的数据传递和对象转换。

following this format:

eval('{' + jsonString + ')');

 

分享到:
评论

相关推荐

    java实现eval函数

    然而,如果你提供的压缩包"java实现eval函数"包含的是一个Java项目,那么它很可能是实现了类似功能的自定义解决方案,可能是一个解析器或者编译器,用于处理特定的表达式或脚本语法。这个项目可能包括以下几个部分:...

    eval函数的一些用法

    本篇文章将深入探讨`eval()`函数的一些用法,并结合源码分析其工作原理和潜在的安全风险。 一、`eval()`函数的基本概念 `eval()`函数接收一个参数,这个参数必须是一个字符串。在执行时,`eval()`会将这个字符串...

    用C语言实现eval函数.zip

    标题中的“用C语言实现eval函数”提示我们,这个压缩包可能包含了一组教程或代码示例,旨在教授如何在C语言中实现一个类似于高级语言中的`eval`函数。`eval`函数通常用于执行字符串形式的代码,这在C语言中并不直接...

    Python eval函数原理及用法解析

    ### 一、`eval` 函数的原理 `eval` 函数的基本形式是 `eval(expression, globals=None, locals=None)`,其中: - `expression`:这是必须提供的一个字符串参数,它代表要执行的 Python 表达式或代码。 - `globals`...

    深入认识javascript中得eval函数

    ### 深入认识JavaScript中的eval函数 #### 一、eval函数概述 在JavaScript中,`eval`函数是一个内置函数,它可以将字符串...开发者应该了解`eval`的工作原理及其局限性,并在确实需要使用它时采取适当的预防措施。

    在Javascript中Eval函数的使用?

    JavaScript中的`eval()`函数是一个非常特殊且功能强大的工具,它能够执行一个字符串作为JavaScript...对于初学者来说,理解`eval()`的工作原理以及其潜在风险是十分重要的,这样在面对具体场景时才能做出明智的选择。

    python3中eval函数用法使用简介

    Python是一种高级编程语言,以其简洁明了的语法和强大的功能支持广泛应用于科学计算、数据分析、人工智能等领域。...对于初学者来说,应当在完全理解其工作原理和潜在风险之后,再在适当的场合和场景下使用eval函数。

    详解python中eval函数的作用

    Python中的eval函数是一个非常强大的工具,它允许程序员执行一个字符串表达式,并返回该表达式的结果。这个功能在某些特定的应用场景中非常...同时,了解Python中的命名空间对于掌握eval的工作原理也有着重要的意义。

    php eval函数用法总结

    `php eval()` 函数是一个非常强大但同时也有潜在风险的特性。...然而,这也使得系统容易受到恶意攻击,因为任何能够注入代码到`eval()`中的地方都可能成为安全漏洞。...理解其工作原理和风险是确保应用程序安全的关键。

    python学习笔记之调用eval函数出现invalid syntax错误问题

    根据Python官方文档的解释,我们可以进一步理解 `eval()` 和 `exec()` 函数的工作原理: - **eval(expression, global=None, local=None)**:此函数接受三个参数,`expression` 表示要计算的表达式字符串,而 `...

    Python使用eval函数执行动态标表达式过程详解

    下面我们将深入探讨`eval()`函数的工作原理、参数含义以及使用注意事项。 ### `eval()`函数的基本使用 `eval(expression, globals=None, locals=None)` 是`eval`函数的标准调用格式。参数解释如下: - `...

    js eval函数使用,js对象和字符串互转实例

    在本文中,我们将深入探讨`eval()`的工作原理,以及如何在JavaScript中进行对象与字符串之间的转换。 首先,让我们看看`eval()`的基本用法。`eval()`接收一个字符串参数,这个字符串被当作JavaScript代码执行。例如...

    js中eval()函数和trim()去掉字符串左右空格应用.docx

    ### JavaScript中的eval()函数与自定义trim()方法详解 #### 一、eval()函数解析 在JavaScript中,`eval()`函数是一种特殊的内置函数,它的主要功能是将传递给它的字符串参数作为JavaScript代码进行解析并执行。`...

    Javascript学习笔记4 Eval函数

    JavaScript中的`eval()`函数是一个非常强大但又充满争议的工具,它允许我们将字符串作为JavaScript代码执行。在初学JavaScript时,...理解其工作原理和注意事项,可以帮助我们在编写JavaScript代码时做出更好的决策。

    详解python eval函数的妙用

    Python的`eval()`函数是一个非常强大且用途广泛的工具,它允许我们将字符串当作Python代码执行,然后返回计算结果。`eval()`函数通常用于动态执行...了解其工作原理和应用场景,可以帮助我们更好地利用它来解决问题。

    JavaScript中eval函数的问题

    总的来说,理解JavaScript的作用域规则以及`eval`函数的工作原理至关重要。在处理动态代码执行时,要格外小心,避免使用`eval`可能导致的安全漏洞和逻辑错误。在本例中,通过正确地管理作用域和避免使用`eval`,可以...

    js eval 压缩工具

    "js eval 压缩工具"就是这样一个专门针对JavaScript文件进行压缩的工具,其原理是利用`eval`函数来执行经过压缩后的代码。 `eval`函数在JavaScript中是一个非常强大的功能,它可以将字符串作为JavaScript代码来执行...

Global site tag (gtag.js) - Google Analytics