我有来自PHP端的结果,.click('.select2-results__option[data-value="Germany"]')
将所有值发送为字符串(而不是它的原始类型)。来自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');
,Boolean(data.quote_tax)
总是评估为true
。
我已经检查了这些帖子,但我找不到合适的解决方案:
任何想法在这里有什么问题或如何做到这一点?
答案 0 :(得分:6)
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);

答案 1 :(得分:2)
您可以组合运算符 - 将字符串解析为数字,然后转换为Boolean:
console.log(Boolean(parseInt('0', 10)));
console.log(!!parseInt('0', 10));
console.log(!!+'0');
答案 2 :(得分:2)
您的上一个方法失败,因为如果转换为布尔值,任何非空字符串的计算结果为true
,包括"0"
。
整数0
的计算结果为false,而非零整数的计算结果为true
。因此,在您的情况下,parseInt(data.quote_tax) == 1
相当于parseInt(data.quote_tax)
。
但是,在这种情况下我会坚持使用第一种方法:
data.quote_tax == '1'
这不需要进行类型转换,意图很明显,也不需要开发人员知道我上面列出的内容需要理解。 不要让代码比以前更加复杂。
答案 3 :(得分:1)
您可以这样做:
!!parseInt('1'); //true
!!parseInt('0'); //false
答案 4 :(得分:0)
我个人总是试着远离coercing types。问题在于,如果你像其他人所建议的那样做,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);
如果您使用===
(而不是==
)prevents Javascript coercion。然后,您可以测试字符串值"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);
它现在可以更加一致地运作。在您的情况下可能或可能不是问题,但我更喜欢这种方法以适应因素。