Javascript 递归函数中的按引用传递
我正在使用此函数删除对象的未定义属性:Javascript 递归函数中的按引用传递,javascript,node.js,Javascript,Node.js,我正在使用此函数删除对象的未定义属性: function removeUndefinedFromObject(obj) { let foundNullProperty = false; if (!obj) return obj; Object.keys(obj).forEach((key) => { if (obj[key] && typeof obj[key] === "object") { foundNu
function removeUndefinedFromObject(obj) {
let foundNullProperty = false;
if (!obj) return obj;
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === "object") {
foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] == null) {
foundNullProperty = true;
delete obj[key];
}
});
return foundNullProperty;
}
removeUndefinedFromObject(myObjWithNullValues)
我希望删除所有空属性。但是,函数调用前后的myObjWithNullValues
值是相同的
因此,我必须使用这个经过修改的版本来满足我的要求:
function removeUndefinedFromObject(obj) {
let foundNullProperty = false;
if (!obj) return obj;
Object.keys(obj).forEach((key) => {
if (obj[key] && typeof obj[key] === "object") {
foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] == null) {
foundNullProperty = true;
delete obj[key];
}
});
return obj;
}
myObjWithNullValues = removeUndefinedFromObject(myObjWithNullValues)
我的问题是为什么第一个不起作用?obj
的所有值不应该通过引用传递吗
编辑
我将该功能改进为:
removeBadValuesFromObject(obj) {
if (!obj || typeof obj !== "object") {
return obj;
}
Object.keys(obj).forEach((key) => {
if (obj[key] !== null && typeof obj[key] === "object") {
this.removeUndefinedFromObject(obj[key]);
} else if (obj[key] === null || obj[key] === undefined || isNaN(obj[key])) {
delete obj[key];
}
});
return obj;
}JavaScript中没有通过引用传递任何内容。对象“值”是引用,但严格说来,它是一种传递值语言。
typeof null
也是“对象”也是null
和undefined
是两种不同的东西。那么,为什么要使用它呢。。。?为什么不直接再次调用该函数呢?谢谢大家的评论。看起来我想删除的值是NaN
,而不是null
,但在控制台中显示为null
,这让我有些困惑,否则,两个版本都会更改obj
。我将函数编辑为removeBadValuesFromObject
。