在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();
}
此代码仍然会警告两次真假两次,而只有两次警告真实。
答案 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