为什么if条件设置为!false?

时间:2014-02-22 13:40:31

标签: javascript jquery

这取自我的另一个问题。下面的代码是作为答案给出的,虽然我不太确定它中发生了什么。

目的是只在开始时获取一次userid,而不是每次调用fetchupdate()时都获取它。

var delay = 300000, userIdFetched = false;
function GetUpdate(status)
{
    if(status == "fail")        
    {
        setTimeout(function(){
            fetchupdate();
        },delay * 2);<-- need to make this double itself
    }
    else
    {
        setTimeout(function(){
            fetchupdate();
        },delay);
    }
};


function fetchupdate(){
    var userid=$_SESSION['UserID'];
    $.ajax()
    {
        type:"POST",
        url:"getupdates.php",
        data:{userid: userid},
        complete:function(data,status)
        {
            if(status == true)
            {
                if(!userIdFetched){ <----Why is this set to !userIdFetched instead of userIdFetched
                    userIdFetched = true;
                    //Get the user Id here 
                }
                $("#Updates").text(data);
                GetUpdate("success");//Changed to String
            }
            else
            {
                $("#Updates").text("You have no updates.")
                GetUpdate("fail");//Changed to String
            }
        }
    }
}

问题:

为什么if条件设置为

if(!userIdFetched)

评估为(!false) - &gt; if(true),这会导致if块中的代码运行,之后userIdFetched设置为true?

不应将if条件设置为

if(userIdFetched)

应该导致if块中的代码运行,之后userIdFetched将设置为true,以表示正在获取的用户ID?

如果可能的话,我希望有人为我澄清这一点。

1 个答案:

答案 0 :(得分:0)

不,它应该是if(!userIdFetched),因为您只需要在ifuserIdFetched时输入false - 阻止。如果是true,则无需输入if - 块。

将其视为大致相当于:

可能会有所帮助
if(userIdFetched == false)

尽管x == false!x在某些“假名”值(demonstration)方面有所不同。在您的情况下,由于您只处理布尔值,因此这不是问题。