簡體   English   中英

使用Javascript中的三元運算符將字符串轉換為布爾值?

[英]String to Boolean using ternary operator in Javascript?

我有一個來自PHP方面的結果, json_encode將所有值發送為字符串(而不是它的原始類型)。 來自quote_tax的字符串是1|0 ,當然這是true|false例如:

{
  "country_id": "3",
  "country_name": "Italy",
  "contract_tax": "1",
  "quote_tax": "0",
  "contract_inflation": "0",
  "quote_inflation": "0"
}

當我想基於這樣的值執行某些操作時,因為它們以字符串形式出現,我需要做這樣的事情:

 data.quote_tax == '1' 
                ? $('#contract_tax').val(1).attr('checked', 'checked') 
                : $('#contract_tax').val(0).removeAttr('checked');

我確實知道.parseInt()將它們轉換為整數,但我相信我需要進行相同的比較,但這種情況與INT比較:

 data.quote_tax == 1 
                ? $('#contract_tax').val(1).attr('checked', 'checked') 
                : $('#contract_tax').val(0).removeAttr('checked');

我試過這種方式:

 Boolean(data.quote_tax) == true 
                ? $('#contract_tax').val(1).attr('checked', 'checked') 
                : $('#contract_tax').val(0).removeAttr('checked');

並且它不起作用,因為即使data.quote_tax = '0' Boolean(data.quote_tax)總是評估為true

我已經檢查了這些帖子,但我找不到合適的解決方案:

任何想法在這里有什么問題或如何做到這一點?

Javascript中的值是“truthy”或“falsy”,這意味着它們將在布爾上下文中被解釋為truefalse 在數字的情況下, 0false ,其他都為true 如果將值轉換為數字,則不必執行任何其他轉換將其視為布爾值。

 var x = parseInt('1'); x ? console.log(true) : console.log(false); x = parseInt('0'); x ? console.log(true) : console.log(false); 

瀏覽此處獲取更多信息。

您可以組合運算符 - 將字符串解析為數字,然后轉換為布爾值:

 console.log(Boolean(parseInt('0', 10))); console.log(!!parseInt('0', 10)); console.log(!!+'0'); 

您的上一個方法失敗,因為如果轉換為布爾值(包括"0" ,任何非空字符串的計算結果為true


整數0計算結果為false,而非零的整數計算結果為true 因此,在您的情況下, parseInt(data.quote_tax) == 1將等同於parseInt(data.quote_tax)


但是,在這種情況下我會堅持第一種方法:

data.quote_tax == '1'

這不需要類型轉換,意圖很明顯,並且也不需要開發人員知道我上面列出的內容需要理解。 不要讓你的代碼比它更復雜。

你可以這樣做:

!!parseInt('1'); //true
!!parseInt('0'); //false

就個人而言,我總是試圖遠離脅迫類型 問題是,如果你像其他人建議的那樣做, if (x)這適用於01 如果由於某種原因你得到"false"2nullundefined ,該怎么辦? 你希望你的代碼在這里做什么?

 undefined ? console.log(true) : console.log(false); null ? console.log(true) : console.log(false); NaN ? console.log(true) : console.log(false); 2 ? console.log(true) : console.log(false); "false" ? console.log(true) : console.log(false); "true" ? console.log(true) : console.log(false); 

如果你使用=== (而不是== )它會阻止Javascript強制 然后,您可以測試字符串值"1"

 "1" === "1" ? console.log(true) : console.log(false); 1 === "1" ? console.log(true) : console.log(false); undefined === "1" ? console.log(true) : console.log(false); null === "1" ? console.log(true) : console.log(false); NaN === "1" ? console.log(true) : console.log(false); 2 === "1" ? console.log(true) : console.log(false); "false" === "1" ? console.log(true) : console.log(false); "true" === "1" ? console.log(true) : console.log(false); 

它現在可以更加一致地工作。 在你的情況下可能會或可能不是一個問題,但我更喜歡這種方法的公正因素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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