!条件和​​变量之间的区别!= Javascript / Jquery中的otherVariable?

时间:2014-02-26 17:59:27

标签: javascript jquery operators

我确信我在这里缺少一些JavaScript基础知识,但任何人都可以帮助我理解为什么这些评估方式不同?最后一行。

$("input[name=myGroup]").click(function () {
    if ($(this).is(":checked")) {
        if ($(this).val() != "Customers") { //do the stuff...

$("input[name=myGroup]").click(function () {
    if ($(this).is(":checked")) {
        if (!$(this).val() == "Customers") { //do the stuff

在我的特定情况下,我认为他们都会评价为真,并“做这些事”。但似乎只有第一个块实际上是根据我的想法进行评估。

在查看MDN之后,尝试深入了解比较运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comparison_operators VS 使用逻辑运算符https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comparison_operators但我仍然不太明白为什么它们产生不同的结果。感谢。

2 个答案:

答案 0 :(得分:5)

Order of operations很重要。 !==之前,所以

!$(this).val() == "Customers"

被视为

false == "Customers"

当然会返回false。尝试使用

!($(this).val() === "Customers")

代替:注意明确的括号。我还使用了严格相等运算符(===而不是==),因此也比较了类型。

当然,只需使用

$(this).val() !== "Customers"

工作得非常好,而且最具可读性。

答案 1 :(得分:0)

  1. !x == y

    • 这意味着测试 LHS NOT(ToBool(x))类似于 RHS y
    • 因此 LHS 在针对true进行测试之前始终会评估为falsey
    • bool == string通常是false
      • 如果ToNumber(string)1booltrue,则会返回true
      • 如果ToNumber(string)0boolfalse,则会返回true
      • 否则返回false
  2. x != y

    • 这意味着测试 LHS x类似于 RHS y,然后执行NOT(result)
    • 您可以将其重写为!(x == y)
  3. 因此,两者之间的区别在于NOT 1 中的 LHS ,以及< em> 2 仅在==测试后应用


    我将== 称为 ,因为它是abstract equality比较。如果您想明确测试,您可能希望使用===或它的否定!==,这是strict equality比较。