2016-05-13 9 views
1

私には意味をなさない問題があります。あなたの誰かが助けることができるかどうか疑問に思っていました。JSON.stringifyとObject.keysは同じオブジェクトで異なる結果を生成します

私はRESTデータにアクセスするために使用するデータソースオブジェクトを持っています。すべての複雑な非同期のものはうまく動作しますが、データソースの設定にオプションを渡す非常に簡単な作業である必要があります。

瞬間に、私はこの機能を持っている:

object.addSourceOption = function(model, optKey, optVal){ 
     if(!_.has(config.sources, model)){ return this; } 
     else{ 
      var options = config.sources[model]["options"]; 
      options[optKey] = optVal; 
      console.log(options[optKey]); 
      //options = JSON.parse(JSON.stringify());     
      console.log("Source Option: " + optKey + ": " + optVal 
         +" added for model: " + model); 
      var debugString = JSON.stringify(options); 
      console.log(debugString); 
      console.log(Object.keys(options)); 
     } 
     return this; 
    }; 

この関数が呼び出されていると、それは私の知る限り見ることができるように良好な値と呼ばれています。ここではいくつかのデバッグ出力の例を示します(この場合は、キーの値が「post_get」であり、値が印刷された関数、です):

function (element){ 

    } 
restData2.js:189 Source Option: post_get: function (element){ 

    } added for model: Contacts 
restData2.js:191 {} 
restData2.js:192 ["post_get"] 

私は理由を理解していないJSON.stringifyとオブジェクト。キーの結果が異なります。私は、私が使っているコードをデバッグするために信頼するもの、あるいは私が書いたコードについて2つの機能に不一致を起こす可能性があるものを理解していません。

答えて

1

おめでとうございます! (それはを省略されているいずれかのundefined場合、

機能、または記号が変換の間に遭遇されて:あなたはJSON.stringify(...)の微妙な部分の一つを見つけた:)

ここMDNから有用な部分ですオブジェクト内に見つかった場合)またはがヌルに見直されて(配列で見つかった場合)。 JSON.stringifyは、JSON.stringify(function(){})またはJSON.stringify(undefined)のような「純粋な」値を渡すときにはundefinedを返すこともできます。

JSONはJavascriptのように見えるので便利ですが、JSONは実際にJavascriptのサブセットです。さらに、すべてのJSオブジェクトをJSONで表現できるわけではありません。詳細はhttp://json.org/でご覧いただけます。

しかし、あなたの例では、post_getはJSONで機能タイプのプロパティがJSONで合法でないためにJSONに表示されません。

希望すると便利です。別に

また、Object.keys(...は)のみはなかったプロパティを返すため、時にはJSオブジェクトは、どちらかObject.keys(...)で返されていない性質を持つことができることを心に留めておきますオブジェクトが拡張する任意のプロトタイプ(基本オブジェクト)から継承されない

+1

ありがとうございました。これは非常に有益なコメントでした。関数がJSONから除外されることにはかなりの意味があります。もし私がそれについて考えるなら、それは明らかであり、ほとんどの場合、私たちが望むものです。しかし、私はそんなことは考えていませんでした。ありがとう。 – aphenine

+0

@aphenine - 喜んで助けてください:)。私はあなたがスタックオーバーフローの新しさを参照してください - これは正解であることに同意する場合は、それをマークする必要があります:)。それは将来の訪問者を助けるでしょう。 –

0

キー値は「post_get」であり、その値は、関数を参照するプロパティが含まれないであろう機能

JSON.stringify()あります。 Object.keys()となります。それはそれと同じくらい簡単です。

関連する問題