簡體   English   中英

Javascript 中的真假

[英]Truthy & Falsy in Javascript

我正在嘗試創建一個名為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)

查看該值是否為假。

這是一個工作片段:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM