Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中使用三元运算符将字符串转换为布尔值?_Javascript_Jquery - Fatal编程技术网

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

在Javascript中使用三元运算符将字符串转换为布尔值?,javascript,jquery,Javascript,Jquery,我有一个来自PHP端的结果,json\u encode将所有值作为字符串发送(而不是原始类型)。位于quote|u tax的字符串是1 | 0,当然这是true | false,例如: { "country_id": "3", "country_name": "Italy", "contract_tax": "1", "quote_tax": "0", "contract_inflation": "0", "quote_inflation": "0" } 当我想基于这些

我有一个来自PHP端的结果,
json\u encode
将所有值作为字符串发送(而不是原始类型)。位于
quote|u 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('1'); //true
!!parseInt('0'); //false
我确实知道如何将它们转换为整数,但我相信我需要进行相同的比较,但与
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\u tax)
即使
data.quote\u tax='0'
也始终计算为
true
,因此它不起作用

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


你知道这里出了什么问题或者怎么做吗

您可以组合运算符-将字符串解析为数字,然后转换为布尔值:

console.log(布尔值(parseInt('0',10));
console.log(!!parseInt('0',10));

console.log(!!+'0')值是“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)您可以执行以下操作:

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

上一种方法失败,因为如果将任何非空字符串转换为布尔值(包括
“0”
),则其计算结果将为
true


整数
0
的计算结果为false,而非零整数的计算结果为
true
。因此,在您的案例中,
parseInt(data.quote\u tax)==1
相当于
parseInt(data.quote\u tax)


然而,在这种情况下,我将坚持第一种方法:

data.quote_tax == '1'

这不需要类型转换,目的很明显,也不需要开发人员了解我上面列出的内容不要让你的代码变得过于复杂。

就我个人而言,我总是尽量远离它。问题是如果你按照别人的建议去做,
if(x)
这对
0
1
非常有效。如果由于某种原因,您得到一个
“false”
2
null
未定义的
,该怎么办。您希望您的代码在这里做什么

未定义?console.log(true):console.log(false);
无效的console.log(true):console.log(false);
南?console.log(true):console.log(false);
2.console.log(true):console.log(false);
“假”?console.log(true):console.log(false);

“真的”?console.log(true):console.log(false)
“0”
是真实的,因为它是非空字符串<代码>“
0
是错误的。尝试
Boolean(Number(data.quote_tax))==true
或干脆
+data.quote_tax
作为条件。或者只使用
!!parseInt('0',10)所有答案都很好,但这是目前为止最好的一个,谢谢它的工作