Javascript:带有布尔值和字符串比较的If语句给出了意外结果

时间:2019-01-17 16:38:27

标签: javascript

在我的代码中,我有以下内容:

console.log(props.acknowledged) // false
console.log(props.type === "SOMETHING") //false
console.log(!props.acknowledged && !props.type === "SOMETHING") //false

!false &&!false导致错误的结果如何?

3 个答案:

答案 0 :(得分:1)

表达式!props.typeprops.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打字的怪癖