【问题标题】:What is the difference between a comparison operator and a logical operator?比较运算符和逻辑运算符有什么区别?
【发布时间】:2015-07-03 03:56:01
【问题描述】:

编辑这个问题已经得到解答,但我选择为未来的读者澄清它。

我研究了关于逻辑运算符!(parameter) 和不等运算符!== 的解释。他们虽然没有澄清它们在什么方面彼此不同。让我们看一个例子。

!($.inArray(latlng, markers) == -1)

$.inArray(latlng, markers) !== -1

这两种表达方式有什么区别?其中一种解决方案是否存在性能问题,使另一种更可取?

【问题讨论】:

  • !(a == b) 的补码是a != b,同样!(a === b) 等价于a !== b
  • 至少有一个区别,那就是 == 会进行强制类型转换,而 !== 不会。

标签: javascript


【解决方案1】:

实际上并没有太大的区别,只是逻辑运行的顺序。第一条语句检查它们是否相等,然后给出相反的结果。第二个检查它们是否不同,通过比较值来查看它们是否相同,如果它们相同则返回 false。

实际上,它们是相同的。实际上有一种叫做DeMorgan's Law 的东西控制了比较运算符和逻辑运算符之间的相等性(即声明它们是等价的,并且可以在不同结构中与具有相同结果的其他运算符进行交换)

【讨论】:

  • 这个答案确实为我解开了一些谜团。并感谢您提供的信息链接。性能怎么样?它们中的任何一个都会对性能产生负面影响吗?
  • 性能确实取决于代码的编译方式,但大多数编译器都理解德摩根定律,并且会找到将代码写入内存的最佳方式。但总的来说,除非您在汇编级别编写代码,否则任何性能影响都可能可以忽略不计,在这种情况下,您可以计算每种情况所需的周期数并确定哪个更快。大部分应用都在卡诺图中,用于去除复杂方程中无关紧要的状态。 en.wikipedia.org/wiki/Karnaugh_map
【解决方案2】:

在你的情况下没有区别 [由于前面提到的德摩根定律],所以坚持对你来说更具可读性。


值得补充:

Comparison operators二元 运算符 -> arity 的值为 2,因为它们比较两个事物。

另一方面,否定运算符 (!) 具有元数,因为它将其 only 参数取反为对应的布尔值 -> 因此其 image[true, false]

这就是为什么您可能会在程序员的生活中遇到!!foo,作为将foo 强制转换为boolean 的一种方式。

【讨论】:

    【解决方案3】:

    比较:取两个值并比较它们。我们可以提出各种问题,例如:

    are these two values "the same", we use == for that
    is this value bigger than that value, >
    is this value bigger than or equal to that, >=
    

    每一项的结果都是一个布尔值。所以我们可以写:

    boolean areTheyEqual = ( x == y );

    如果 x 等于 y,那么 aretheyEqual 将是“真”。现在假设您想要一个变量“areTheyDifferent”。我们可以通过两种方式得到它,或者使用“not”运算符,它适用于布尔值:

    boolean areTheyDifferent = ! areTheyEqual;
    

    或者我们可以使用“notEqual”比较

    boolean areTheyDifferent = ( x != y );
    

    所以!运算符接受一个布尔值并“反转”它。你需要阅读

    !=
    

    作为单个比较运算符,就像 >= 是单个运算符

    比较运算符用于逻辑语句中,以确定变量或值之间的相等或差异。例如 x!=y

    逻辑运算符用于确定变量或值之间的逻辑。

    例如 !(x==y)

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多