`
琉璃月
  • 浏览: 43058 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

javascript eval和JSON之间的联系

    博客分类:
  • js
阅读更多
javascript eval和JSON之间的联系


如果您想详细了解eval和JSON请参考以下链接:

eval :https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval

JSON:http://www.json.org/

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 + ')');
分享到:
评论

相关推荐

    javascript eval和JSON

    javascript eval和JSON之间的联系

    javascript中eval解析JSON字符串.docx

    javascript中eval解析JSON字符串.docx

    JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析

    在Javascript使用eval将接送转化为json对象 var jsonData = '{"persons":{"name":"成龙","age":58},{"name":"吴京","age":33},"name":"甄子丹","age":44}'; var jsonObj = eval('('+jsonData+')'); //访问...

    javascript中eval解析JSON字符串

    我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法,我们可以用 eval() 函数。 var str = '{"name": "hanzichi", "age": 10}'; var obj = eval('...

    JavaScript的eval JSON object问题

    通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。为什么?我也不清楚,但我找到了解决这个问题的方法。 ...

    json2 json

    parse.js:该文件包含替代JSON的parse函数thatuses递归下降而不是eval.json_parse_state.js:此文件包含替代JSON的parse函数thatuses状态机器代替eval.cycle.js:这个文件包含了两个函数,JSON.decycle和JSON....

    javascript巧用eval函数组装表单输入项为json对象的方法.docx

    javascript巧用eval函数组装表单输入项为json对象的方法.docx

    JSON 和 JavaScript eval使用说明

    JSON (JavaScript Object Notation) 一种轻量级的数据交换格式,比 XML 更轻巧,JSON 是JavaScript 原生格式,这意味着 JavaScript 中处理 JSON 数据不需要任何 API 和工具包。

    如何利用javascript接收json信息并进行处理

    javascript接收处理json信息 ajax获得接口信息,javascript本身处理json信息; 通过eval()把接收的json字符串变成真实的对象信息。 提供的json接口数据01.php: <?php header("content-type:text/html;charset...

    JavaScript数组、json对象、eval()函数用法实例分析

    主要介绍了JavaScript数组、json对象、eval()函数用法,结合实例形式分析了JS数组创建、赋值、连接、翻转,json对象定义、读取,eval()函数的功能、使用等,需要的朋友可以参考下

    为什么JS中eval处理JSON数据要加括号

    由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaScript对象。利用eval函数无疑是一种简单而直接的方法...

    javascript巧用eval函数组装表单输入项为json对象的方法

    主要介绍了javascript巧用eval函数组装表单输入项为json对象的方法,实例分析了JavaScript使用eval函数动态构造json对象的相关技巧,需要的朋友可以参考下

    eval-json-path:EvaluateQuery给定路径下json对象的值

    eval-json-path 评估/查询给定路径下json对象的值 通常,可以通过属性名称或索引来访问js对象变量。 该模块允许按字符串给出的路径/步骤进行访问 用法 const evalJsonPath = require ( 'eval-json-path' ) const ...

    json2 js json格式处理包

    当2009年12月ECMA大会通过ECMAScript编程语言标准第五版时,JSON成为JavaScript的内置特性。 json2.js:该文件在全局对象中创建一个JSON属性(如果还没有的话),将其值设置为一个包含stringify的对象方法和解析方法。...

    xmlhttp_asp+javascript+json+xml

    实现通用型基于xmlhttp的ajax模型。...通过eval方法解译服务端回传的json格式数据。 服务端用asp编写,通过response.binaryRead()解译上传数据, 处理完成后,把数据格式化为jsString,该方法源于继承json2.0.

Global site tag (gtag.js) - Google Analytics