使用Javascript中的三元运算符将字符串转换为布尔值?

时间:2016-12-09 15:51:59

标签: javascript jquery

我有来自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

我已经检查了这些帖子,但我找不到合适的解决方案:

任何想法在这里有什么问题或如何做到这一点?

5 个答案:

答案 0 :(得分:6)

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);




See here for more information.

答案 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"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);

如果您使用===(而不是==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);

它现在可以更加一致地运作。在您的情况下可能或可能不是问题,但我更喜欢这种方法以适应因素。