在Javascript中使用三元运算符将字符串转换为布尔值?
我有一个来自PHP端的结果,在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" } 当我想基于这些
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)代码>所有答案都很好,但这是目前为止最好的一个,谢谢它的工作