Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 即使两个表达式都为true,也会跳过if语句_Javascript_Html - Fatal编程技术网

Javascript 即使两个表达式都为true,也会跳过if语句

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函数,因此当用户单击某个单元格时,它会将该单元格的行和列传递给该函数。示例单元格: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][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引擎的不同,它还将检查
未定义的