Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建javascript函数的其他方法_Javascript - Fatal编程技术网

创建javascript函数的其他方法

创建javascript函数的其他方法,javascript,Javascript,我遇到了下面的脚本,不理解第一行。它显然要么返回JSON.stringify,要么返回匿名函数。这样做最好,还是使用传统的函数printObj(obj)?另外,JSON是在哪里定义的?谢谢 var printObj = typeof JSON != "undefined" ? JSON.stringify : function(obj) { var arr = []; $.each(obj, function(key, val) { var next = key + ": ";

我遇到了下面的脚本,不理解第一行。它显然要么返回JSON.stringify,要么返回匿名函数。这样做最好,还是使用传统的函数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) );

JSON已经是javascript中存在的一个函数。(它有
stringify
parse
,您最可能使用它们)

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

(我相信您使用的函数“hack”是为了修复IE8没有JSON对象的问题。如果您在页面中设置:

而且,第一行赋值的结构使用了一种叫做

例如:

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

JSON是一些Web浏览器(如FireFox和Chrome)自动定义的变量。旧版本的IE没有定义JSON,许多恼人的用户仍然有这些版本,这就是为什么在本例中手动定义JSON


我认为最好的解决方案是只添加对json库的引用。可以在这里找到:

它定义了一个总是可以使用的
printObj
函数:

  • 如果定义了JSON.stringify,那么printObj就是这个函数
  • 如果JSON.stringify不可用,则使用新函数
注意

  • 这只有在您希望支持IE7时才有意义
  • 如果obj是数组,则替换函数无法正常工作(它生成字符串
    {…}
“我遇到以下脚本,不理解第一行。它显然返回JSON.stringify或匿名函数。”

看来你明白第一行了

“最好这样做,还是使用传统的函数printObj(obj)?”

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

问题中给出的备选方案并不是一个完整的垫片,即使是,本地人的表现肯定会更好

“另外,JSON是从哪里定义的?”


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

使用此语法,您可以在检查是否存在合适的内置方法的同时创建函数。JSON是一些现代浏览器在引擎中内置的对象,非常类似于窗口或位置。较旧的浏览器没有JSON,因此re将返回undefined,并允许使用自定义匿名函数。

var printObj=//设置变量printObj
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”//如果这是真的,则将printObj设置为
?JSON.stringify//所有的答案都很好。David对我印象最深,但可能是因为我先阅读了其他人。谢谢,为什么要降低我原来的问题的分数。如果有我不应该做的事情,请告诉我。谢谢可能是因为你的标题对你的实际提问非常模糊和/或错误。这是只是有点不清楚。(我没有投反对票)谢谢莱克,我很难获得冠军,但下次会更加小心。