Javascript JSON.stringify无法比较对象';s函数。它是如何工作的?
我在网上搜索如何在Javascript JSON.stringify无法比较对象';s函数。它是如何工作的?,javascript,Javascript,我在网上搜索如何在javascript中比较对象。所有的解决方案通常集中在JSON.stringifyJSON.stringify比较只有绝对属性的对象意味着固定值 JS中有(本质上)两种内置类型(null和undefined是特殊的): 基本类型(布尔值、数字、字符串、null*、未定义*) 引用类型-除原语外,所有引用类型都被视为对象,如函数 为什么JSON.stringify无法比较具有该函数的对象 var a = {a:'xyz', fun: function () {
javascript
中比较对象。所有的解决方案通常集中在JSON.stringify
JSON.stringify
比较只有绝对属性的对象意味着固定值
JS中有(本质上)两种内置类型(null
和undefined
是特殊的):
基本类型(布尔值、数字、字符串、null*、未定义*)
引用类型-除原语外,所有引用类型都被视为对象,如函数
为什么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
如何可能以及如何比较具有函数属性的对象?因为JSON。stringify
不会对函数进行stringify。它只接受对象参数
var a={a:'harsha',
fun:function(){vara=10;};
变量b={a:'harsha',
fun:function(){vara=15;};
log(JSON.stringify(a));
log(JSON.stringify(b));
log(JSON.stringify(JSON.stringify(a)==JSON.stringify(b))代码>JSON.stringify默认情况下不在对象内部执行stringify函数。使用类似的替代品
JSON.stringify(a, function(key, val) {
return (typeof val === 'function') ? '' + val : val;
})
var a={a:'harsha',
fun:function(){vara=10;};
变量b={a:'harsha',
fun:function(){vara=15;};
log(JSON.stringify)函数(key,val){
返回值(typeof val=='function')?“”+val:val;
}),JSON.stringify(b))
log(JSON.stringify)函数(key,val){
返回值(typeof val=='function')?“”+val:val;
})==JSON.stringify(b,函数(key,val){
返回值(typeof val=='function')?“”+val:val;
}));代码>请注意,两个不同的函数永远不相等,即使它们具有相同的内容。副本进一步讨论了这一点({})
-不可能有更复杂的对象compare@WoozyCoder我已经研究了这些问题,找到了类似于JSON的解决方案。stringify
但是当我更改函数变量值时,it提示的主要问题是true
。两个不同的函数永远不相等
-你是说对象吗@JJJ@JaromandaX嗯,是的,但是OP在功能上有很大的障碍,所以我选择了帮助别人而不是迂腐。