代码之家  ›  专栏  ›  技术社区  ›  discodane

javascript:if语句,通过布尔值和字符串比较得到意外结果

  •  0
  • discodane  · 技术社区  · 7 年前

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

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

    那是怎么回事啊!错误!把错误的结果变成错误?

    3 回复  |  直到 7 年前
        1
  •  1
  •   ganjim    7 年前

    你需要添加这样的偏执狂: !(props.type === "SOMETHING")

    优先权 ! 不仅仅是 === 运算符,因此您的代码将按以下方式进行计算:

    !(props.type) === "SOMETHING"
    

    所以如果 props.type 等于说 "something else" ,它将成为 false 你的整个表情是 something && false 哪个是 .

    我想你想要的是:

    !(props.type === "SOMETHING")
    

    甚至

    props.type !== "SOMETHING"
    
        2
  •  1
  •   Pointy    7 年前

    表达式 !props.type 将转换 props.type 布尔运算。如果是一根绳子,那么 !推进型 方法 (props.type != "") . 随后 === 与字符串比较 "SOMETHING" 将永远 false .

    换一种说法,

    !props.type === "SOMETHING"
    

    绝对不一样

    props.type !== "SOMETHING"
    

    也许你的意思是

    !(props.type === "SOMETHING")
    

    一元的 ! 运算符的绑定比 = = .

        3
  •  1
  •   mistahenry    7 年前

    !props.type 正在否定字符串,该字符串将强制字符串为布尔值( true 在这种情况下)会导致 false . 你在比较 完全平等的“某物”,总是会导致错误。任何东西 && false 总是会导致

    正如其他人所说,解决方法是将“不”移动到比较中:

    props.type !== "SOMETHING"
    

    只是想帮助解释一下javascript输入的奇怪之处