JSON.stringify无法比较对象的功能。它是如何工作的?

时间:2017-05-22 10:24:26

标签: javascript

我在网上搜索如何比较Object中的javascript。所有解决方案通常都关注JSON.stringifyJSON.stringify比较只有绝对属性意味着固定值的对象。

  

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

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

如何比较具有函数属性的对象?

2 个答案:

答案 0 :(得分:1)

默认情况下,JSON.stringify不会在对象内进行字符串化。使用像

这样的替代品
 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;
}));




答案 1 :(得分:0)

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