2012-10-28 36 views
0

我遇到以下脚本,并且不理解第一行。它显然或者返回JSON.stringify或者一个匿名函数。最好这样做,还是使用传统的function printObj(obj)?另外,JSON在哪里定义?谢谢创建javascript函数的其他方法

var printObj = typeof JSON != "undefined" ? JSON.stringify : function(obj) { 
    var arr = []; 
    $.each(obj, function(key, val) { 
    var next = key + ": "; 
    next += $.isPlainObject(val) ? printObj(val) : val; 
    arr.push(next); 
    }); 
    return "{ " + arr.join(", ") + " }"; 
}; 

$("#log").append(printObj(object1)); 
+0

所有好的答案。大卫与我打的最多,但可能是因为我先读了其他人。谢谢 – user1032531

+0

另外,为什么我原来的问题降价。如果有些事情我不该做,请让我知道。谢谢 – user1032531

+0

可能是因为你的标题实际上是模糊的和/或错误的,你实际上在问什么。这只是有点不清楚。 (我没有downvote) – Layke

回答

2
var printObj = // setting the variable printObj 
       typeof JSON != 'undefined' // if this is true then set printObj to 
        ? JSON.stringify // <- ...this function 
       : function(obj) { 
        // otherwise let's build it ourselves... 
       }; 

typeof JSON != 'undefined'将返回true或false标识符JSON是否已被定义。如果x尚未定义,则typeof x不会导致参考错误。

1

JSON已经是存在于JavaScript中的函数。 (它有你最有可能使用的stringifyparse

第一行只是确保stringify存在一个函数,如果它没有,那么它将该对象传递给试图解析的函数函数JSON对象并将其作为JSON字符串返回。

(我相信功能“黑客”所使用,是为了解决一个IE8 compatibility issue,其中IE8没有一个JSON对象,你可以要避免使用完全如果您在页面设置:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

同样,第一线路分配的结构,采用一种叫做ternary operator assignment

,例如:

var t = 1 == 1 ? 1 : 0; 
1

JSON是由一些Web浏览器(如FireFox和Chrome)自动定义的变量。 IE的旧版本没有定义JSON,许多烦人的用户仍然有这些版本,这就是为什么在这种情况下手动定义它的原因。

我认为最好的解决方案,就是添加一个对json库的引用。可以在这里找到:http://www.json.org/js.html

1

它定义了一个printObj功能,可以一直使用:

  • 如果JSON.stringify定义,printObj是这个函数
  • 如果JSON.stringify不可用,新的功能用于

注意

1

“我碰到下面的脚本来了,并不理解第一行。它显然或者返回JSON.stringify或者一个匿名函数。

看来你了解第一线。

”是最好的做这种方式,还是采用传统的function printObj(obj)

简单地定义功能都会有不同的结果,因为本地JSON.stringify将被忽略,并且应该优于垫片。

在这个问题给出的备选不是一个完整的垫片,即使它是,本机将肯定有更好的表现。

“此外,哪里JSON得到界定?”

默认情况下,它在ECMAScript 5环境中定义。

1

使用此语法,您可以在检查合适的内置方法的同时创建函数。 JSON是一些现代浏览器已经构建到引擎中的对象,非常像窗口或位置。旧的浏览器不会有JSON,因此会返回未定义的,并允许使用自定义匿名函数。

相关问题