【问题标题】:In Javascript, can I use == two times in a single condition? [closed]在 Javascript 中,我可以在一个条件下使用 == 两次吗? [关闭]
【发布时间】:2014-09-05 19:50:35
【问题描述】:

我的意思是我是否能够,例如,输入:

     if(numb1 == numb2 == numb3){
        //exec code
     }

【问题讨论】:

  • 你试过了吗?发生了什么?
  • 可以,但不一定是你想的那样。
  • 从来没有。我只是被问到。鉴于我的无知,我试过你们:)
  • if(true==false==false) = true:D
  • 您收到如此负面回应的原因是因为您实际上没有尝试...

标签: javascript if-statement


【解决方案1】:

扩展我的评论:

可以,但它可能不是你想的那样。

它“翻译”为:

if( (numb1 == numb2) == numb3)

== 可以被认为是一个函数,它接受两个参数并在它们相等时返回true。所以你的代码是:

if( [true or false] == numb3)

这仅在numb3 是布尔值时有效,对应于numb1numb2 的(不)相等性。如果你想检查元素是否相等,这不是方法。


要检查数组的所有元素是否相等,试试这个:

function array_elements_equal(arr) {
    if( arr.length < 2) return true;
    var l = arr.length, i;
    for( i=1; i<l; i++) {
        if( arr[0] != arr[i]) return false;
    }
    return true;
}

var arr = [numb1, numb2, numb3];
if( array_elements_equal(arr)) {
    alert("Hello!");
}

现在来一些随机的乐趣:

0==0              // true
0==0==0           // false
0==0==0==0        // true
0==0==0==0==0     // false
0==0==0==0==0==0  // true
...

【讨论】:

  • @freakish 不完全 - 2 == 2 == 2 产生 false 因为 true == 2false
  • 是的,不是真的,但是1==1==1,因为true==1true=="1"。还有true==[1](提醒我为什么我讨厌JavaScript,那是一些非常时髦的东西)可能还有很多其他情况?无论如何,恕我直言,应该不惜一切代价避免这种语法。
【解决方案2】:

可以,这并不一定意味着它会评估为您所期望的。

旁注:通常,我们必须考虑到 Javascript 的 Operator Precedence,但由于我们只使用一种类型的运算符,因此它是无关紧要的,并且该语句只是从左侧计算向右。

true == true == true 肯定会计算为 true,因为语句的第一部分 (true == true) 计算为 true,然后将其与第三个运算符进行比较(有效地进行剩余的比较 true == true) ,它将评估为 true 本身。

但是,当出现以下情况时,就会出现问题:

true == false == false

当然,这必须评估为false!但是,经过进一步检查,结果是true。为什么?这实际上与声明相同

(true == false) == false
      ^^
   false == false
         ^^
        true

简而言之:当您以这种方式使用运算符时要小心,因为它们的运行方式与您想象的不同。在大多数情况下,最好将语句分成多个条件。

JSFiddle

【讨论】:

  • 为了清楚起见,默认情况下,并非所有运算符都会从左到右进行评估。其他运算符可能从右到左进行评估,这就是 MDN 所说的“关联性”。
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多