[英]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”,這意味着它們將在布爾上下文中被解釋為true
或false
。 在數字的情況下, 0
為false
,其他都為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)
這適用於0
和1
。 如果由於某種原因你得到"false"
, 2
, null
或undefined
,該怎么辦? 你希望你的代碼在這里做什么?
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.