Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 条件And运算符(&;&;)能否包含2个以上的操作数?_Javascript_Html_Events_Javascript Events - Fatal编程技术网

Javascript 条件And运算符(&;&;)能否包含2个以上的操作数?

Javascript 条件And运算符(&;&;)能否包含2个以上的操作数?,javascript,html,events,javascript-events,Javascript,Html,Events,Javascript Events,早些时候我问了一个关于这段代码的问题,在我修改它以反映答案后,它在一定程度上起作用,但有一个bug,实际上只有你才能将红色与红色或蓝色与蓝色或绿色与绿色匹配。我知道问题在于checkColors函数。基本上我想知道是否有可能改变 if (squares1[0].style.backgroundColor=='rgb(255, 0, 0)' && squares2[0].style.backgroundColor=='rgb(255, 0, 0)'){ squar

早些时候我问了一个关于这段代码的问题,在我修改它以反映答案后,它在一定程度上起作用,但有一个bug,实际上只有你才能将红色与红色或蓝色与蓝色或绿色与绿色匹配。我知道问题在于checkColors函数。基本上我想知道是否有可能改变

if (squares1[0].style.backgroundColor=='rgb(255, 0, 0)' &&      squares2[0].style.backgroundColor=='rgb(255, 0, 0)'){
    squares3[0].style.backgroundColor='rgb(255, 0, 0)';
    gotIt;

或者类似的东西。这个函数几乎破坏了整个东西,我想知道上面的或类似的东西是否可能,因为checkColor函数似乎每次都会改变第三个正方形的颜色

我更新了小提琴,它显示了GoIt函数的用途。

最初的目的是让两个左div的颜色组成右div的颜色

基本上,我想知道是否有可能把…改成…或类似的东西

是的,你做这件事的方式是你会怎么做,而不是打字错误。例如:

if (a && b) {
    if (c) {
       foo();
    }
}
相当于

if (a && b && c) {
    foo();
}
我找到了这一页。msdn.microsoft.com/en-us/library/2a723cdk.aspx,它只将它们显示为
x&&y
,所以我想我只能使用2

就其本身而言,这是正确的:
&&
运算符与JavaScript语言中的大多数运算符一样,是一个二进制运算符:它接受两个操作数。(JavaScript还有几个一元运算符[接受一个操作数的运算符],如求反之类,还有一个三元运算符[接受三个操作数的运算符])。加法(
+
)和减法(
-
)运算符也是二进制运算符:它们使用两个操作数

但是:就像加法和减法一样,使用
&
可以将一个表达式的结果输入到另一个表达式中。就像我们可以写的那样:

a + b - c
…引擎计算
a+b
,得到值
r
,然后计算
r-c
,我们可以执行以下操作:

if (a && b && c)
评估结果如下:

  • a和&b
    进行求值,得到结果
    r

  • r&c
    已评估

  • 这样做是因为
    &&
    是从左到右求值的。您可以通过这种方式将任意多个表达式组合在一起:

    if (a && b && c && d && e && f && g)
    

    只是为了完整性:并不是所有的表达式都是从左到右求值的,有些操作符可以跳转队列,先执行。这称为“运算符优先级”。例如,
    *
    的优先级高于二进制的
    +
    ,因此如果我们编写

    1 + 2 * 3
    
    结果是
    7
    ,而不是
    9
    *
    先给我们
    2*3
    =
    6
    ,然后是
    1+6
    =
    7


    checkColors
    函数的问题在于,它依赖于返回的值位于
    rgb(r,g,b)
    表单中,但许多浏览器使用不同的表单(无论指定颜色时使用何种表单)。它可以是
    rgba(r,g,b,a)
    rgb(r,g,b)
    #rrggbb
    蓝色
    …你明白了

    相反,在另一个位置(可能是
    data-*
    属性)跟踪您指定的颜色(以您正在使用的形式)。然后你就知道了,当你把某样东西和那种颜色比较时,它将是你所期望的形式。或者,您可以在代码中将其作为状态变量进行跟踪。有几种方法可以跟踪此信息

    下面是一个简单得多的例子:

    Array.prototype.forEach.call(
    document.queryselectoral(“.toggle”),
    职能(部门){
    div.addEventListener(“单击”,colorClick,false);
    }
    );
    函数colorClick(){
    var color=this.getAttribute(“数据颜色”);
    如果(!color | | color==“blue”){
    color=“绿色”;
    }否则{
    color=“蓝色”;
    }
    this.style.backgroundColor=颜色;
    此.setAttribute(“数据颜色”,颜色);
    }
    div{
    颜色:白色;
    边框:1px纯黑;
    显示:内联块;
    宽度:100px;
    高度:50px;
    }
    点击我
    点击我
    点击我
    
    单击我
    一个问题是,您不能依靠浏览器将颜色属性报告为
    rgb()
    表达式。有些人会,有些人不会。你最好用一个或多个类名或类似的东西来跟踪状态。你可以有你想要的,只要你把引号和括号放在正确的地方,真正的问题是。为什么你只能有两个?我完全同意尖头顺便说一句,你不能可靠地检查颜色。例如,我的浏览器将失败,因为它返回RGBA。有些包含空格,有些不包含空格。等等:-)
    1 + 2 * 3