[英]Truthy & Falsy in Javascript
我正在嘗試創建一個名為onlyTruthy的函數,它接收一個對象,循環遍歷它的所有屬性,並刪除任何虛假的。 然后返回傳入的對象。
以下代碼不斷失敗,我不確定我做錯了什么..
var onlyTruthy = function(someObject){
for(var property in someObject){
if(someObject[property] == "false"){
delete someObject.property;
}
}
return someObject;
};
這里有兩個主要問題:
if(someObject[property] == "false"
正在檢查屬性是否實際上是字符串"false"
。這不是在進行布爾檢查或檢查falsey
值。
刪除屬性時,您必須這樣做: 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)
查看該值是否為假。
這是一個工作片段:
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)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.