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