zoukankan      html  css  js  c++  java
  • javascript json 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 value

    bar = '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
  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/2091644.html
Copyright © 2011-2022 走看看