Javascript 即使两个表达式都为true,也会跳过if语句
我有一个用数组填充表的网页。它有一个doClick函数,因此当用户单击某个单元格时,它会将该单元格的行和列传递给该函数。示例单元格:onclick=“doClick(0,1)”Javascript 即使两个表达式都为true,也会跳过if语句,javascript,html,Javascript,Html,我有一个用数组填充表的网页。它有一个doClick函数,因此当用户单击某个单元格时,它会将该单元格的行和列传递给该函数。示例单元格:onclick=“doClick(0,1)” 函数doClick(行、列) { var top=第1行; var bottom=行+1; 左向量=col-1; 右var=col+1; var交换=错误; if((top!=-1)和&(cells[top][col].innerHTML=”“) { 单元格[top][col].innerHTML=单元格[row][c
函数doClick(行、列)
{
var top=第1行;
var bottom=行+1;
左向量=col-1;
右var=col+1;
var交换=错误;
if((top!=-1)和&(cells[top][col].innerHTML=”“)
{
单元格[top][col].innerHTML=单元格[row][col].innerHTML;
单元格[行][col].innerHTML=“”;
交换=真;
}
如果((右!=4)和&(单元格[行][right].innerHTML=“”))
{
单元格[行][右].innerHTML=单元格[行][列].innerHTML;
单元格[行][col].innerHTML=“”;
交换=真;
}
如果((底部!=4)和&(单元格[bottom][col].innerHTML=“”))
{
单元格[bottom][col]。innerHTML=单元格[row][col]。innerHTML;
单元格[行][col].innerHTML=“”;
交换=真;
}
else if((左!=-1)和&(单元格[行][左].inn=”“)
{
单元格[row][lef].innerHTML=单元格[row][col].innerHTML;
单元格[行][col].innerHTML=“”;
交换=真;
}
其他的
{
警惕(“非法移动”);
}
单元格[行][右]。innerHTML=“”
错误。您缺少双(三)=
正确的方法应该是
单元格[行][右].innerHTML==”
看起来您的代码中可能有一些输入错误或误解
关于IF语句中条件的简要说明
像
(cells[top][col].innerHTML=“”)
这样的语句作为条件将始终返回true,因为这是将cells[top][col].innerHTML
设置为”
,或者至少实例化变量。因此,测试绝对true或false的合适条件是(cells[top][col].innerHTML==”)
。但是,您甚至可以不这样做,只需将(cells[top][col].innerHTML=“”)
替换为cells[top][col]。innerHTML
。您可能会遇到一些其他问题,尽管变量尚未实例化。我会将后一个逻辑封装在IF语句中,以检查cells[top][col].innerHTML
甚至被实例化
要修复此问题,请查看我对您的代码所做的以下修改
function doClick(row, col)
{
var top = row -1;
var bottom = row +1;
var left = col -1;
var right = col +1;
var swapped = false;
if(typeof cells[top][col].innerHTML !== 'undefined' $$ cells[top][col].innerHTML !== null)
{
if ((top != -1) && cells[top][col].innerHTML !== '')
{
cells[top][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((right != 4) && cells[row][right].innerHTML !== '')
{
cells[row][right].innerHTML = cells[row][col].innerHTML ;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((bottom != 4) && (cells[bottom][col].innerHTML))
{
cells[bottom][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else
{
alert("Illegal Move.");
}
}
else if (typeof cells[row][left].inn !== 'undefined' && (left != -1) && cells[row][left].inn !== '')
{
cells[row][lef].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else
{
alert("Illegal Move.");
}
}
演示上述代码的示例
var testVar1='';
var testVar2='Hello';
//var testVar3;控制台是否记录了条件以确保它100%返回您期望的结果?单元格[top][col]。innerHTML=“”
这似乎有点可疑-你的意思是=
?=
用于赋值,=
和==
用于比较。谢谢。我会尝试一下。当然!我只是更新了它,使其更准确一点。实际上,属性语句总是返回正在设置的值,在本例中是一个空字符串。Plot twist:空字符串是一个falsy值,这意味着javascript中的逻辑检查将其视为false。javascript中的其他falsy值是数字0(零),null,undefined,NaN,当然还有false。赋值运算符就是问题所在。非常感谢。这是用新鲜的眼睛做的。我盯着那段代码看了好几个小时,从来没有看到过它。@PedroLima,对。但是,为了提供一个解决直接问题的工作示例,我只测试了未定义的赋值运算符。但是,为了提供一个准确的demostation,我已经更新了上面的代码段。另外,检查null
还包括0和NaN。根据JS引擎的不同,它还将检查未定义的。