在我的代码中,我有以下内容:
console.log(props.acknowledged) // false
console.log(props.type === "SOMETHING") //false
console.log(!props.acknowledged && !props.type === "SOMETHING") //false
!false &&!false导致错误的结果如何?
答案 0 :(得分:1)
表达式!props.type
将props.type
转换为布尔值。如果是字符串,则!props.type
表示(props.type != "")
。与字符串===
的后续"SOMETHING"
比较将始终为false
。
换句话说,
!props.type === "SOMETHING"
绝对不同于
props.type !== "SOMETHING"
也许你的意思是
!(props.type === "SOMETHING")
一元!
运算符的绑定比===
绑定更紧密。
答案 1 :(得分:1)
您需要添加如下的括号:!
===
的优先级大于!(props.type) === "SOMETHING"
运算符,因此您的代码将按以下方式求值:
props.type
因此,如果"something else"
等于false
,它将变成something && false
的二进制值,并且您的整个表达式是false
,即!(props.type === "SOMETHING")
。
我认为您想要的是:
props.type !== "SOMETHING"
甚至
Order_ID
答案 2 :(得分:1)
!props.type
否定了字符串,这将字符串强制为布尔值(在本例中为true
),结果为false
。然后,您将false
与具有严格相等性的“某些”进行比较,这将始终导致错误。任何&& false
都将始终产生false
正如其他人所述,解决方案是将not移入比较:
props.type !== "SOMETHING"
只想帮助解释javascript打字的怪癖