Javascript 如果条件允许值通过

Javascript 如果条件允许值通过,javascript,if-statement,cookies,boolean,Javascript,If Statement,Cookies,Boolean,在javascript中,我创建了一个计时器,当计时器启动时,如果计时器启动或未启动,我会在cookie中保留该值。在文件的开头,我将cookie分配给变量“timerStarted”。现在,当我加载另一个页面时,它应该检查计时器是否已启动,如果已启动,则启动计时器,以便在页面重新加载后计时器继续运行。如果timerStarted的值为false,则不应启动计时器。我试过以下方法: alert(timerStarted); timerStarted = false; if(timerStart

在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条件。当我事先发出警报时,它是false,在条件下,当代码:timerStarted=false时,它也是false;未插入。timerStarted=false;这是我最后一次尝试确保它确实有假值,但它仍然运行if代码。当我尝试使用timerStarted===true的条件时,情况正好相反,即使timerStarted为true,计时器也会停止

编辑:

此代码仍然会对true和false发出两次警报,而只有true才会发出两次警报

问题是,如果timerStarted为false,它仍然运行if 状况

那是因为

  • 你用了
    ==
    是不相同的
    运算符
  • 您正在使用
    |
    而不是
    &&
    ,并且
  • 如果是
    字符串,则不需要
    timerStarted.valueOf
试试这个

if( timerStarted != false )
{
    alert(timerStarted);
    startTimer();
}
问题是,如果timerStarted为false,它仍然运行if 状况

那是因为

  • 你用了
    ==
    是不相同的
    运算符
  • 您正在使用
    |
    而不是
    &&
    ,并且
  • 如果是
    字符串,则不需要
    timerStarted.valueOf
试试这个

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

我想我找到了问题所在。尽管我在if之前设置了timerStarted=false,但在if中它计算了一个字符串,我尝试了
if(Boolean(timerStarted)!=false)
,这确实有效。我还没有弄明白,如果在if之前将字符串设置为布尔值,为什么它会对字符串求值。多亏了gurvinder372,我才明白这一点,因为typeof

我想我找到了问题所在。尽管我在if之前设置了timerStarted=false,但在if中它计算了一个字符串,我尝试了
if(Boolean(timerStarted)!=false)
,这确实有效。我还没有弄明白,如果在if之前将字符串设置为布尔值,为什么它会对字符串求值。多亏了gurvinder372,我才明白这一点,因为typeof

在哪里以及如何设置计时器开始?请出示一张照片,不是吗!=,不是==当我试着这么做的时候,我也这么做了。你在哪里设置时间?如何设置时间?请出示一张照片,不是吗!=,不是==当我尝试时,它对meTried也有同样的效果,但两个警报触发器都给出了true或false。即使它只应显示两次true,在if之前仅显示一次false。您是否可以共享timerStarted的
类型和timerStarted本身的输出?输出为布尔值,在本例中为false。显然,在timerStarted上设置false之前,它是字符串类型。尽管如此,当我在if之前将其设置为false时,它仍然进入if循环if(!timerStarted)也尝试了这一点,但仍然没有意义,因为两个警报触发器都给出了true或false。即使它只应显示两次true,在if之前仅显示一次false。您是否可以共享timerStarted的
类型和timerStarted本身的输出?输出为布尔值,在本例中为false。显然,在timerStarted上设置false之前,它是字符串类型。当我在if之前将其设置为false时,它仍然进入if loopif(!timerStarted),这仍然没有意义