2017-05-22 4 views
0

javascriptObjectを比較する方法についてネットで検索します。すべての解決策は、一般的にJSON.stringifyに焦点を当てています。 JSON.stringifyは、絶対属性のみを持つオブジェクトを固定値と比較します。JSON.stringifyはオブジェクトの機能を比較できません。それがどのように働きますか?

The JSON.stringify() method converts a JavaScript value to a JSON stringです。

あります(基本的に)2ビルトインタイプJS(nullundefinedは特別なもの)で:

プリミティブ型(ブール値、数値、文字列、ヌル*、未定義*)。

参照型 - プリミティブを除くすべてがfunctionのようにオブジェクトとして扱われます。

なぜJSON.stringifyは、その機能を持つオブジェクトを比較できないのですか?

var a = {a:'xyz', 
     fun: function() { var a = 10;}}; 
var b = {a:'xyz', 
      fun: function() { var a = 10;}}; 

a == b => false 
a === b => false 
a.fun == b.fun => false 
a.a == b.a => true 

私はその後、私は、オブジェクトの比較のためにJSON.stringifyを発見し、ネットで検索。

JSON.stringify(a) === JSON.stringify(b) => true 

が、私は修正b

var b = {a:'xyz', 
      fun: function() { var a = 15;}}; //change a from 10 to 15. 

にしようとすると、今、私は

JSON.stringify(a) === JSON.stringify(b) => true 

どのように可能とどのように機能するプロパティを持つオブジェクトを比較することを確認しますか?

+0

ノートのような代用品を使用してください。重複はこの点についてさらに議論する。 – JJJ

+0

'({})=({})' - !私はすでにこれらの質問を経て、このそれでJSON.stringify' 'のようなソリューションが、主な問題を発見した@WoozyCoder、より複雑なオブジェクトが –

+0

を比較するチャンスがありません関数の変数値を変更したときにプロンプ​​ト「真」を返します。 – eigenharsha

答えて

0

になりました。JSON.stringifyは、機能をストリング化しません。オブジェクトパラメータのみをとります。

var a = {a:'harsha', 
 
     fun: function() { var a = 10;}}; 
 
var b = {a:'harsha', 
 
      fun: function() { var a = 15;}}; 
 

 
console.log(JSON.stringify(a)); 
 
console.log(JSON.stringify(b)); 
 
console.log(JSON.stringify(JSON.stringify(a) === JSON.stringify(b)));

1

JSON.stringifyは、デフォルトでは、オブジェクトの内部機能を文字列化しません。彼らは同じ内容を持っている場合でも、2つの異なる機能が決して同じであることを

JSON.stringify(a, function(key, val) { 
    return (typeof val === 'function') ? '' + val : val; 
}) 

var a = {a:'harsha', 
 
     fun: function() { var a = 10;}}; 
 
var b = {a:'harsha', 
 
      fun: function() { var a = 15;}}; 
 

 
console.log(JSON.stringify(a, function(key, val) { 
 
    return (typeof val === 'function') ? '' + val : val; 
 
}),JSON.stringify(b)) 
 

 
console.log(JSON.stringify(a, function(key, val) { 
 
    return (typeof val === 'function') ? '' + val : val; 
 
}) === JSON.stringify(b, function(key, val) { 
 
    return (typeof val === 'function') ? '' + val : val; 
 
}));

関連する問題