Javascript 无法对';未定义';或';空';

Javascript 无法对';未定义';或';空';,javascript,node.js,Javascript,Node.js,我试图在函数参数中进行解构,但得到如下错误: TypeError:无法对“undefined”或 “空” var deepDiffMapper=function(){ 返回{ 已创建的值:“已创建”, 值_已更新:“已更新”, 值\u已删除:“已删除”, 值_未更改:“未更改”, 地图:功能({ obj1, obj2 }) { if(this.isFunction(obj1)| this.isFunction(obj2)){ 抛出“无效参数。给定函数,应为对象”; } if(this.isVa

我试图在函数参数中进行解构,但得到如下错误:

TypeError:无法对“undefined”或 “空”

var deepDiffMapper=function(){
返回{
已创建的值:“已创建”,
值_已更新:“已更新”,
值\u已删除:“已删除”,
值_未更改:“未更改”,
地图:功能({
obj1,
obj2
}) {
if(this.isFunction(obj1)| this.isFunction(obj2)){
抛出“无效参数。给定函数,应为对象”;
}
if(this.isValue(obj1)| | this.isValue(obj2)){
返回{
类型:this.compareValue(obj1、obj2),
数据:(obj1==未定义)?obj2:obj1
};
}
/*取消注释时出错
var diff={};
用于(obj1中的var键){
if(此.isFunction(obj1[key])){
继续;
}
var值2=未定义;
if('undefined'!=typeof(obj2[key])){
value2=obj2[键];
}
diff[key]=此映射(obj1[key],值2);
}
用于(obj2中的var键){
if(此.isFunction(obj2[key])| |('undefined'!=typeof(diff[key])){
继续;
}
diff[key]=此.map(未定义,obj2[key]);
}
返回差;
*/
},
比较值:函数(值1、值2){
如果(值1==值2){
返回此.VALUE\u不变;
}
if(this.isDate(value1)&&this.isDate(value2)&&value1.getTime()==value2.getTime()){
返回此.VALUE\u不变;
}
如果('undefined'==typeof(value1)){
返回创建的此.VALUE\u;
}
如果('undefined'==typeof(value2)){
返回此值。\u已删除;
}
返回此值。\u已更新;
},
isFunction:功能(obj){
返回{}.toString.apply(obj)='[对象函数]';
},
iArray:功能(obj){
返回{}.toString.apply(obj)='[objectarray]';
},
isDate:功能(obj){
返回{}.toString.apply(obj)='[对象日期]';
},
isObject:功能(obj){
返回{}.toString.apply(obj)='[object]';
},
isValue:功能(obj){
return!this.isObject(obj)&!this.isArray(obj);
}
}
}();
var result=deepDiffMapper.map({
“obj1”:{
答:"我没有改变",,
b:‘我被删除了’,
e:{
答:1,,
b:错,
c:空
},
f:[1{
a:‘一样’,
b:[{
a:一样
}, {
d:‘删除’
}]
}],
g:新日期('2017.11.25')
},
“obj2”:{
答:"我没有改变",,
c:‘我是被创造的’,
e:{
a:‘1’,
b:“,
d:“创建”
},
f:[{
a:‘一样’,
b:[{
a:一样
}, {
c:“创建”
}]
}, 1],
g:新日期('2017.11.25')
}
});

控制台日志(结果)
函数
.map()
等待一个具有两个属性的对象参数
obj1
obj2
。在注释掉的代码中,使用两个参数调用它,但没有以下属性:
map(obj1[key],value2)。根据其签名,调用应该是
map({obj1:obj1[key],obj2:value2})

使用错误的参数递归调用
map
函数

diff[key] = this.map(obj1[key], value2)
这需要具有
obj1
obj2
的对象,以便可以正确地对其进行分解

您应该尝试两个内部
map
调用:

diff[key] = this.map({obj1: obj1[key], obj2: value2)