我在功能开始时尝试做的事情很容易从我的评论中看出来
this.move = function ( )
{
if (this.dx | this.dy != 0) return; // exit early if both this.dx and this.dy are zero
也就是说,我想要相当于if (this.dx == 0 && this.dy == 0)
。我认为按位OR
是正确的,因为this.dx | this.dy
不等于zero
当且仅当this.dx
至少有一个位或this.dy
至少有 this.move = function ( )
{
console.log("this.dx = " + this.dx + ", this.dy = " + this.dy); // TEST
if (this.dx | this.dy != 0) return; // exit early if both this.dx and this.dy are zero
时一位接通(或两者都至少有一位接通)。但我一定是错的,因为我的考试
this.dx
显示当this.dy
和 .name {
background-color: red;
display: inline;
float: left;
}
.delete {
background-color: green;
display: inline;
margin-right: 0px;
}
.price {
background-color: blue;
display: inline;
margin-right: 5px;
}
.row {
width: 450px;
background-color: yellow;
border: 1px solid blue;
display:table;
}
.info {
height:57px;
display: table-cell;
vertical-align:middle;
background-color: ccc;
border: 1px solid green;
top: 25%;
}
都为零时,函数的其余部分正在执行。
这里发生了什么?
答案 0 :(得分:3)
问题是条件执行为:
this.dx | (this.dy != 0)
试试这个:
if (!(this.dx | this.dy)) return;
答案 1 :(得分:1)
根据precedence table,在完成不等式检查后,将按
[JS]> 0 | 0 == 0
1
因此,您的表达式实际执行为:
if (this.dx | (this.dy != 0)) { ... }
要解决此问题,请按位OR括起来:if ((this.dx | this.dy) != 0)
。
另外,正如@ Jon-Skeet指出的那样,正确的检查可能应该是==
。