我在网上搜索如何比较Object
中的javascript
。所有解决方案通常都关注JSON.stringify
。 JSON.stringify
比较只有绝对属性意味着固定值的对象。
The JSON.stringify() method converts a JavaScript value to a JSON string
JS中(基本上)有两种内置类型(null
和undefined
是特殊的):
原始类型(布尔值,数字,字符串,空*,未定义*)。
引用类型 - 除了基元以外所有内容都被视为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 :(得分: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)));