Javascript 条件And运算符(&;&;)能否包含2个以上的操作数?
早些时候我问了一个关于这段代码的问题,在我修改它以反映答案后,它在一定程度上起作用,但有一个bug,实际上只有你才能将红色与红色或蓝色与蓝色或绿色与绿色匹配。我知道问题在于checkColors函数。基本上我想知道是否有可能改变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
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