首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中的Truthy & Falsy

Javascript中的Truthy & Falsy
EN

Stack Overflow用户
提问于 2016-05-04 00:36:48
回答 1查看 610关注 0票数 0

我正在尝试创建一个名为onlyTruthy的函数,它接收一个对象,循环遍历它的所有属性,并删除任何虚假的属性。然后返回传入的对象。

下面的代码一直在失败,我不知道我做错了什么。

代码语言:javascript
复制
var onlyTruthy = function(someObject){
  for(var property in someObject){
    if(someObject[property] == "false"){
      delete someObject.property;
    }
  }
  return someObject;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-04 00:39:53

这里有两个主要问题:

  1. if(someObject[property] == "false"正在检查一个属性是否实际上是一个字符串"false"。这并不是在进行布尔检查或检查falsey值。
  2. 删除该属性时,必须执行以下操作:delete someObject[property],而不是delete someObject.property。您所做的总是试图删除一个名为"property"的属性,而不是变量property的实际值。

我建议你把你的代码改为:

代码语言:javascript
复制
var onlyTruthy = function(someObject){
  for(var property in someObject){
    if(!someObject[property]){
      delete someObject[property];
    }
  }
  return someObject;
};

FYI,您的if (someObject[property] == "false")正在检查属性是否为字符串"false"。这根本不是布尔检查。

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

至于真理和法尔赛。在Javascript中,很多值都是假的:

代码语言:javascript
复制
undefined
null
NaN
false
'' (empty string)
0
-0
0n (BigInt(0))

所以,你不想通过比较if (x == false)来检查法尔赛。你想做的就是:

代码语言:javascript
复制
if (!x)

看看这个值是不是假的。

这里有一个有用的片段:

代码语言:javascript
复制
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)));

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37016591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档