var myJSONObject = {"bindings": [
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
        {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
        {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
    ]
};上面的示例,创建了一个包括单独成员”bindings”的对象,此成员包括一个含有三个对象(”ircEvent”, “method”, 与 “regex”)的数组成员可以通过.或者下标操作符检索。myJSONObject.bindings[0].method    // "newURI"为了将JSON文本转换为对象,可以使用eval()函数。eval()函数调用JavaScript编辑器。由于JSON是JavaScript 的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。var myObject = eval('(' + myJSONtext + ')');
这一段是从JSON官方剪来的,最后一段的大意就是用eval()读取JSON,但我想知道为什么使用eval()读取时,要在JSON的外面再加一层括号var myObject = eval('(' + myJSONtext + ')');

解决方案 »

  1.   

    补充一下,我另外在官网上下载了一个JSON解析器http://www.JSON.org/json2.js
    它里面有段代码是这么写的
    if (!this.JSON) {
        this.JSON = {};
    }(function () {
    ……略去此处无用代码……}());
    请问为什么function ()函数外要加括号?也就是为什么是(function ())这种样子?
    还有就是为什么这个函数没有名字?这样为什么会成立呢?
    为什么不是function AA()或是var AA = function ()呢?
    谢谢
      

  2.   

    还是接上面的问题
    if (!this.JSON) {
        this.JSON = {};
    }(function () {
    ……略去此处无用代码……}()); 
    这种(function () {……}()); 表示形式是什么含义呢?用法是怎么样的?
    谢谢回答
      

  3.   

    ()的优先级做高。当(语句)的时候就先执行其中的语句了,
    同样如果其中的语句是定义函数的话,那么 (定义匿名函数语句)先执行,然后再调用上述函数 fun(), 
    (function(){})() 相当于 var fun = function(){} 然后  fun();在 eval('(' + "{a:b}" + ')'); 中,如果不加中间的() 
    就变成 eval("{a:b}"),相当于执行语句{a:b},执行该语句并没有意义,
    要么就写成 eval("var obj = {a:b}"), 执行该语句就是为对象赋值
    要么就加(),让({a:b})作一次运算返回得到对象.
      

  4.   

    第一个问题,Eval函数的作用是将括号内的语句变成JS语句执行,第二个问题,那是高级JS的一种写法!!
      

  5.   

    <script type="text/javascript">
    var a = eval("{a:'aaa'}");
    var b = eval("(" + "{b:'bbb'}" + ")");
    window.alert(a.a);
    window.alert(b.b);谢谢4楼,自己又写了个小例子就完全明白了!!