Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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中的Falsy_Javascript_Object - Fatal编程技术网

特鲁西;Javascript中的Falsy

特鲁西;Javascript中的Falsy,javascript,object,Javascript,Object,我试图创建一个名为onlyTruthy的函数,它接受一个对象,循环遍历它的所有属性,并删除任何错误的属性。然后返回传入的对象 以下代码不断失败,我不确定我做错了什么 var onlyTruthy = function(someObject){ for(var property in someObject){ if(someObject[property] == "false"){ delete someObject.property; } } return

我试图创建一个名为onlyTruthy的函数,它接受一个对象,循环遍历它的所有属性,并删除任何错误的属性。然后返回传入的对象

以下代码不断失败,我不确定我做错了什么

var onlyTruthy = function(someObject){
  for(var property in someObject){
    if(someObject[property] == "false"){
      delete someObject.property;
    }
  }
  return someObject;
};

这里有两个主要问题:

  • if(someObject[property]==“false”
    正在检查属性是否实际上是字符串
    “false”
    。这不是在进行布尔检查或检查
    false

  • 删除属性时,必须执行以下操作:
    delete someObject[property]
    ,而不是
    删除someObject.property
    。您总是试图删除名为
    “property”
    的属性,而不是变量
    property
    的实际值

  • 我建议您将代码更改为:

    var onlyTruthy = function(someObject){
      for(var property in someObject){
        if(!someObject[property]){
          delete someObject[property];
        }
      }
      return someObject;
    };
    
    仅供参考,您的
    if(someObject[property]==“false”)
    正在检查属性是否为字符串
    “false”
    。这根本不是布尔检查

    而且,您必须将
    删除某个对象.property
    更改为
    删除某个对象[property]

    至于truthy和falsey,在Javascript中,很多值都是假的:

    undefined
    null
    NaN
    false
    '' (empty string)
    0
    -0
    0n (BigInt(0))
    
    因此,您不想通过比较
    if(x==false)
    来检查false。您只需要执行以下操作:

    if (!x)
    
    以查看该值是否为假

    下面是一个工作片段:

    var someObject={“name”:“ernest”,“age”:50,“funky”:false,“foo”:“bar”,“foo2”:“};
    仅var真实性=功能(obj){
    for(obj中的var属性){
    如果(!someObject[属性]){
    删除obj[财产];
    }
    }
    返回obj;
    };
    
    document.write(JSON.stringify(onlyTruthy(someObject));
    这里有两个主要问题:

  • if(someObject[property]==“false”
    正在检查属性是否实际上是字符串
    “false”
    。这不是在进行布尔检查或检查
    false

  • 删除属性时,必须执行以下操作:
    delete someObject[property]
    ,而不是
    删除someObject.property
    。您总是试图删除名为
    “property”
    的属性,而不是变量
    property
    的实际值

  • 我建议您将代码更改为:

    var onlyTruthy = function(someObject){
      for(var property in someObject){
        if(!someObject[property]){
          delete someObject[property];
        }
      }
      return someObject;
    };
    
    仅供参考,您的
    if(someObject[property]==“false”)
    正在检查属性是否为字符串
    “false”
    。这根本不是布尔检查

    而且,您必须将
    删除某个对象.property
    更改为
    删除某个对象[property]

    至于truthy和falsey,在Javascript中,很多值都是假的:

    undefined
    null
    NaN
    false
    '' (empty string)
    0
    -0
    0n (BigInt(0))
    
    因此,您不想通过比较
    if(x==false)
    来检查false。您只需要执行以下操作:

    if (!x)
    
    以查看该值是否为假

    下面是一个工作片段:

    var someObject={“name”:“ernest”,“age”:50,“funky”:false,“foo”:“bar”,“foo2”:“};
    仅var真实性=功能(obj){
    for(obj中的var属性){
    如果(!someObject[属性]){
    删除obj[财产];
    }
    }
    返回obj;
    };
    
    document.write(JSON.stringify(onlyTruthy(someObject));
    什么叫“持续失败”?即使使用了
    ==false
    ,将值与布尔值进行比较与将值转换为布尔值有很大不同。“持续失败”是什么意思意思?即使你确实使用了
    ==false
    ,将值与布尔值进行比较与将值转换为布尔值是非常不同的。明白了!你的解释肯定加深了我的理解。使用你的代码,由于某种原因它仍然失败。
    var someObject={name:“ernest”,age:50,funky:false,foo:bar,foo2:“}
    应该变成
    {name:“ernest”,年龄:50,foo:bar}
    @just\u be\u kind-你还必须从
    删除某个对象.property
    改为
    删除某个对象[property]
    。我的答案中现在有一个工作演示。@jfriend00完成了!:-)明白了!你的解释肯定加深了我的理解。使用你的代码,它仍然因为某些原因而失败。
    var someObject={name:“ernest”,age:50,funky:false,foo:bar,foo2::};
    应该变成
    {name:“ernest”,age:50,foo:bar}
    @just\u be\u kind-您还必须从
    删除某个对象。属性
    更改为
    删除某个对象[属性]
    。我的答案中现在有一个工作演示。@jfriend00完成!:-)