如果条件允许价值滑过

时间:2016-10-12 07:43:55

标签: javascript if-statement cookies boolean

在javascript中我制作了一个计时器,当启动时,如果计时器在cookie中启动或未启动,我会保留该值。在文件的开头,我将该cookie分配给变量“timerStarted”。现在,当我加载另一个页面时,应检查计时器是否已启动,如果是,则启动计时器,以便计时器在页面重新加载后继续运行。如果timerStarted的值为false,则不应启动计时器。我尝试了以下事项:

alert(timerStarted);
timerStarted = false;

if(timerStarted !== false || timerStarted !== "false" || timerStarted.valueOf() !== false)
{
    alert(timerStarted);
    startTimer();
}

在我的JS文件开头:

var timerStarted = Cookies.get('timerStarted') ? Cookies.get('timerStarted') : false;

问题是如果timerStarted为false,它仍会运行if条件。当我事先警告它是假的,在条件下它也是假的代码:timerStarted = false;没有插入。 timerStarted = false;是我最后一次尝试确保它确实具有错误值,仍然运行if代码。当我尝试使用timerStarted === true的条件时,它会反过来,即使timerStarted为真,计时器也会停止。

编辑:

alert(timerStarted);
if(timerStarted != false)
{
    alert(timerStarted);
    startTimer();
}

此代码仍然会警告两次真假两次,而只有两次警告真实。

2 个答案:

答案 0 :(得分:2)

  

问题是如果timerStarted为false,它仍会运行if   条件

那是因为

  • 您使用!== not-identical运算符
  • 您使用||代替&&
  • 如果是timerStarted.valueOf,则无需string

试试这个

if( timerStarted != false )
{
    alert(timerStarted);
    startTimer();
}

答案 1 :(得分:0)

我想我发现了这个问题。即使我在if之前设置了timerStarted = false,但是如果它评估了一个字符串,我试图做if (Boolean(timerStarted) != false)并且实际上有效。我还没弄清楚为什么它会在if之前设置为布尔值来评估字符串。感谢gurvinder372我因为typeof

而想出来了