Truthy & Falsy in Javascript

Truthy & Falsy in Javascript

本文关键字:in Javascript Falsy amp Truthy      更新时间:2023-09-26

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

下面的代码一直失败,我不确定我做错了什么。。

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

这里有两个主要问题:

  1. if(someObject[property] == "false"正在检查属性是否实际上是字符串"false"。这不是进行布尔检查或检查falsey值。

  2. 删除特性时,必须执行以下操作:delete someObject[property],而不是delete 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"。这根本不是一个布尔检查。

并且,您必须将delete someObject.property更改为delete someObject[property]

至于真与假。在Javascript中,很多值都是假的:

undefined
null
NaN
false
'' (empty string)
0
-0
0n (BigInt(0))

因此,您不希望通过比较if (x == false)来检查是否存在虚假。你只想做:

if (!x)

查看该值是否为false。

下面是一个工作片段:

var someObject = {"name":"ernest","age":50,"funky":false,"foo":"bar","foo2":""};
var onlyTruthy = function(obj){
  for(var property in obj){
    if(!someObject[property]){
      delete obj[property];
    }
  }
  return obj;
};
document.write(JSON.stringify(onlyTruthy(someObject)));