Javascript:If语句,带有布尔值和字符串比较,给出意外结果
在我的代码中,我有以下内容:Javascript:If语句,带有布尔值和字符串比较,给出意外结果,javascript,Javascript,在我的代码中,我有以下内容: console.log(props.acknowledged) // false console.log(props.type === "SOMETHING") //false console.log(!props.acknowledged && !props.type === "SOMETHING") //false 这真是一个好主意!假&!假结果为假?表达式!props.type将props.type转换为布尔值。如果是字符串,那么!props
console.log(props.acknowledged) // false
console.log(props.type === "SOMETHING") //false
console.log(!props.acknowledged && !props.type === "SOMETHING") //false
这真是一个好主意!假&!假结果为假?表达式
!props.type
将props.type
转换为布尔值。如果是字符串,那么!props.type
表示(props.type!=“”)
。与字符串“SOMETHING”
的后续比较将始终为false
换句话说
!props.type === "SOMETHING"
绝对不一样
props.type !== "SOMETHING"
也许你的意思是
!(props.type === "SOMETHING")
一元
运算符比表达式绑定得更紧!props.type
将props.type
转换为布尔值。如果是字符串,那么!props.type
表示(props.type!=“”)
。与字符串“SOMETHING”
的后续比较将始终为false
换句话说
!props.type === "SOMETHING"
绝对不一样
props.type !== "SOMETHING"
也许你的意思是
!(props.type === "SOMETHING")
一元
代码>操作符绑定得比===
更紧密。您需要添加这样的偏执:!(props.type==“某物”)
的优先级
大于==
运算符,因此您的代码将按以下方式进行评估:
!(props.type) === "SOMETHING"
因此,如果props.type
等于say“something other”
,它将成为false
的二进制值,您的整个表达式是something&&false
,即false
我想你想要的是:
!(props.type === "SOMETHING")
甚至
props.type !== "SOMETHING"
您需要添加这样的论断:!(props.type==“某物”)
的优先级
大于==
运算符,因此您的代码将按以下方式进行评估:
!(props.type) === "SOMETHING"
因此,如果props.type
等于say“something other”
,它将成为false
的二进制值,您的整个表达式是something&&false
,即false
我想你想要的是:
!(props.type === "SOMETHING")
甚至
props.type !== "SOMETHING"
!props.type
对字符串求反,将字符串强制为布尔值(true
,在本例中),这将导致false
。然后将false
与严格相等的“某物”进行比较,这将始终导致false。任何和&false
都会导致false
如其他人所述,解决方案是将not移动到比较中:
props.type !== "SOMETHING"
只是想帮助解释一下javascript键入的怪癖!props.type
对字符串求反,将字符串强制为布尔值(true
,在本例中),这将导致false
。然后将false
与严格相等的“某物”进行比较,这将始终导致false。任何和&false
都会导致false
如其他人所述,解决方案是将not移动到比较中:
props.type !== "SOMETHING"
只是想帮助解释javascript键入的怪癖!props.type==“SOMETHING”
与不同!(props.type==“某物”)
。运算符的优先级!我想你的意思是props.type!==“某物”
。您正在否定该属性。console.log(!“foo”)
==>表示您有false===“SOMETHING”
@epascarello关键是我没有抱怨,我做了一些事情,trincot有超过10万个repI我也没有抱怨,但让OP知道了。“干得好,@GeorgeJempty;-)<代码>!props.type==“SOMETHING”
与不同!(props.type==“某物”)
。运算符的优先级!我想你的意思是props.type!==“某物”
。您正在否定该属性。console.log(!“foo”)
==>表示您有false===“SOMETHING”
@epascarello关键是我没有抱怨,我做了一些事情,trincot有超过10万个repI我也没有抱怨,但让OP知道了。“干得好,@GeorgeJempty;-)