Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.stringify无法比较对象';s函数。它是如何工作的?_Javascript - Fatal编程技术网

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在功能上有很大的障碍,所以我选择了帮助别人而不是迂腐。