0

次のスクリプトに出くわしましたが、最初の行がわかりません。どうやら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) );
4

6 に答える 6

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 x場合、参照エラーは発生しません。x

于 2012-10-28T16:16:03.050 に答える
1

「次のスクリプトに出くわしましたが、最初の行がわかりません。JSON.stringifyまたは無名関数のいずれかを返すようです。

あなた最初の行を理解しているようです。

「この方法で行うのが最善ですか、それとも従来の方法を使用するのが最善function printObj(obj)ですか?

ネイティブJSON.stringifyは無視され、シムよりも優先されるため、関数を定義するだけでは結果が異なります。

質問で与えられた代替案は完全なシムではありません、そしてそれがそうであったとしても、ネイティブは間違いなくより良いパフォーマンスをするでしょう。

「また、JSONはどこで定義されますか?」

これは、デフォルトでECMAScript5環境で定義されています。

于 2012-10-28T16:10:53.517 に答える
1

この構文を使用すると、適切な組み込みメソッドの存在を確認すると同時に関数を作成できます。JSONは、一部の最新のブラウザーがエンジンに組み込んだオブジェクトであり、WindowやLocationによく似ています。古いブラウザにはJSONがないため、undefinedが返され、カスタム無名関数を使用できるようになります。

于 2012-10-28T16:13:29.443 に答える
1

JSONはすでにjavascriptに存在する関数です。(それは持っていてstringifyparseあなたが使う可能性が最も高いものです)

最初の行は、stringifyの関数が存在することを確認します。存在しない場合は、JSONオブジェクトを解析してJSON文字列として返す関数関数にオブジェクトを渡します。

(使用している関数「ハック」は、IE8にJSONオブジェクトがないIE8の互換性の問題を修正するために行われている思います。ページで設定すると、これを完全に使用することを回避できます

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

また、その最初の行の代入の構造は、三項演算子の代入と呼ばれるものを使用します。

例えば:

var t = 1 == 1 ? 1 : 0;
于 2012-10-28T16:09:09.633 に答える
1

JSONは、FireFoxやChromeなどの一部のWebブラウザーによって自動的に定義される変数です。古いバージョンのIEはJSONを定義しておらず、多くの迷惑なユーザーがまだこれらのバージョンを持っているため、この場合は手動で定義されています。

最善の解決策は、jsonライブラリへの参照を追加することだと思います。ここで見つけることができます:http ://www.json.org/js.html

于 2012-10-28T16:09:20.180 に答える
1

printObj常に使用できる関数を定義します:

  • JSON.stringifyが定義されている場合、printObjはこの関数です
  • JSON.stringifyが使用できない場合は、新しい関数が使用されます

ご了承ください

于 2012-10-28T16:09:31.927 に答える