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