创建javascript函数的替代方法

时间:2012-10-28 16:06:39

标签: javascript

我遇到了以下脚本,并且不了解第一行。它显然要么返回JSON.stringify或匿名函数。最好是这样做,还是使用传统的function printObj(obj)?此外,JSON在哪里定义?感谢

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) );

6 个答案:

答案 0 :(得分: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'是否已定义,

JSON都将返回true或false。如果尚未定义typeof xx将不会导致引用错误。

答案 1 :(得分:1)

JSON已经是javascript中存在的一个函数。 (它最有可能使用stringifyparse

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

(我相信你正在使用的函数“hack”用于修复IE8 compatibility issue,其中IE8没有JSON对象。你可以避免使用它如果您在页面中设置了以下内容:

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

此外,第一行分配的结构使用了一个名为ternary operator assignment的东西。

例如:

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

答案 2 :(得分:1)

JSON是由某些Web浏览器自动定义的变量,如FireFox和Chrome。 IE的旧版本没有定义JSON,很多讨厌的用户仍然拥有这些版本,这就是为什么在这种情况下手动定义的原因。

我认为最好的解决方案是添加对json库的引用。可在此处找到:http://www.json.org/js.html

答案 3 :(得分:1)

它定义了一个始终可以使用的printObj函数:

  • 如果定义了JSON.stringify,则printObj是此函数
  • 如果JSON.stringify不可用,则使用新函数

请注意

答案 4 :(得分:1)

  

“我遇到了以下脚本,并且不理解第一行。显然要么返回JSON.stringify,要么返回匿名函数。

似乎你了解第一行。

  

“最好是这样做,还是使用传统的function printObj(obj)

简单地定义函数将产生不同的结果,因为原始JSON.stringify将被忽略,并且应优先于垫片。

问题中给出的替代方案不是一个完整的垫片,即使它是,本机肯定会表现得更好。

  

“此外,JSON在哪里定义?”

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

答案 5 :(得分:1)

使用此语法,您可以在检查是否存在合适的内置方法的同时创建函数。 JSON是一些现代浏览器内置于引擎中的对象,很像Window或Location。较旧的浏览器不具有JSON,因此将返回undefined,并允许使用自定义匿名函数。